sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Identity con ceros rellenos a la izquierda

Como los otros ya han señalado con razón, un INT nunca tiene ceros a la izquierda, solo contiene el valor, eso es todo (y eso es bueno de esa manera).

Si necesita algún formato adicional, siempre puede agregar una columna calculada a su tabla, algo como:

ALTER TABLE dbo.Identitytest
  ADD DisplayNumber AS  RIGHT('000' + CAST(number AS VARCHAR(3)) , 3) PERSISTED

De esta manera, su IDENTIDAD INT se utilizará como INT y siempre contiene el valor numérico, mientras que DisplayNumber contiene 001, 002, ... 014, 015, ..... y así sucesivamente - automáticamente, siempre actualizado.

Dado que es un campo persistente, ahora es parte de su tabla y puede consultarlo e incluso ponerle un índice para que las consultas sean más rápidas:

SELECT value FROM dbo.IdentityTest WHERE DisplayNumber = '024'

Y, por supuesto, podría usar casi cualquier formato en la definición de su columna calculada, por lo que también podría agregar un prefijo o algo así:

ALTER TABLE dbo.Identitytest
  ADD DisplayNumber 
      AS  'ABC-' + RIGHT('000' + CAST(number AS VARCHAR(3)) , 3) PERSISTED

Entonces, en este caso, su DisplayNumber sería ABC-001, ABC-002, ... y así sucesivamente.

Obtiene lo mejor de ambos mundos:mantiene su IDENTIDAD INT, que es numérica y aumenta automáticamente mediante SQL Server, y puede definir un formato de visualización como desee y tenerlo disponible en cualquier momento.