Identidad SQL con ceros acolchados iniciales

Marqué una columna como Identidad en mi tabla

create table Identitytest( number int identity(1,001) not null, value varchar(500) ) 

Necesito que la columna de identidad se incremente como 001,002,003 , etc.

La database muestra que está insertando como 1,2,3 , etc.

¿Cómo puede hacerse esto?

Si desea mostrar su columna number con ceros a la izquierda, simplemente acóplela en su instrucción SELECT . Es un número, NO se almacenará con ceros a la izquierda como un número integer.

 SELECT RIGHT('00000' + CAST([number] AS varchar(5)) , 3) FROM IdentityTest 

El 3 es el número de caracteres que desea total en la pantalla de salida.

Como los otros ya lo han señalado con acierto (una INT nunca tiene ceros a la izquierda), solo mantiene el valor, eso es todo (y eso es bueno de esa manera).

Si necesita un formatting 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 forma, su INT IDENTIDAD se usará como INT y siempre contiene el valor numérico, mientras que DisplayNumber contiene 001, 002, ... 014, 015, ..... y así sucesivamente: automágicamente, siempre actualizado.

Dado que se trata de un campo persistente, ahora es parte de su tabla, y puede consultar en él, e incluso poner un índice sobre él para hacer las consultas más rápidamente:

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

Y, por supuesto, podría usar casi cualquier formatting 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.

Obtendrá lo mejor de ambos mundos: mantendrá su INT IDENTIDAD, que es numérica y automáticamente aumentada por SQL Server, y puede definir un formatting de visualización de la manera que desee y tenerlo disponible en cualquier momento.

Si necesita tanto el número de incremento automático (que solo puede ser un número) como una representación alfabética del número, puede considerar search columnas calculadas.

Aquí hay algunos enlaces para que empieces:

¿Por qué necesitas eso? Como un integer, 001 es lo mismo que 1. Si lo que desea es una pantalla u otros fines, cree otra columna y haga su trabajo allí (puede hacerlo como parte de un desencadenador en la tabla, en la inserción, que se ve en la fila recién insertada, y crea la input en la columna de manera apropiada.

Tengo una tabla donde estoy almacenando un número integer, pero los usuarios quieren verlo como XXX, incluso si tiene ceros, entonces escribí este código

 declare @a int set @a=1 select replicate('0',3-len(@a))+ cast(@a as varchar(4)) 

Aquí hay otro método:

 create table TEST_T (ui int NOT NULL identity, name varchar(10)) insert into TEST_T values ( 'FRED' ) select NAME, ui, RIGHT('0000' + LTRIM(STR(ui)), 4) as ui_T from TEST_T go /* NOTE: A view could be created with a calculated column instead of the identity column. */ create view TEST_V as select NAME, RIGHT('0000' + LTRIM(STR(ui)), 4) as ui_V from TEST_T go go select * from TEST_V drop view TEST_V drop table TEST_T 

No es tanta la duplicación de datos (?) Como agregar una columna a la tabla y no es necesario especificar la columna en la instrucción de selección.

Necesito que la columna de identidad se incremente como 001,002,003, etc.

La database muestra que está insertando como 1,2,3, etc.

Las bases de datos SQL almacenan valores, no los literales que usó para escribir esos valores. 002 es 2. Al igual que 1 + 1 es 2. ¿Esperaría que SELECT 1 + 1 muestre la cadena "1 + 1" en lugar de 2?

Si desea que se guarden los ceros iniciales en su columna, debe usar un tipo de carácter. Pero luego no puedes usar AUTOINCREMENT / IDENTITY .

Lo que realmente desea es algo así como printf("%03d", number) en el progtwig que lee de la database.