2010-02-01 24 views

Respuesta

0

No. El tipo de columna real debe ser un int o bigint también funciona.

+0

Gracias. ¿Te importaría elaborar un poco sobre cómo se crearía una columna así? ¿O tal vez proporcionar una referencia a lo que ha declarado? –

0

No, lo siento. La "propiedad" de identidad solo se puede colocar en columnas con el tipo de datos entero o decimal.

+0

Gracias. ¿Te importaría elaborar un poco sobre cómo se crearía una columna así? ¿O tal vez proporcionar una referencia a lo que ha declarado? –

+0

Este depende totalmente de la naturaleza del valor de clave principal que requieren, es decir, qué es lo que quieren poner como "ABCD", y por qué, y cómo se determina, y ... condujo a un largo serie de preguntas de diseño, y como ayer fue un día muy ocupado en el trabajo, decidí no seguirlo. (Ok, también fue una respuesta fácil, y esta vez iba por la respuesta rápida y no la buena/robusta). –

0

No, pero usted puede crear su instrucción Select de tal manera como para devolver el código que desee:

Select 'ABCD-' + Cast(IdColumn as varchar) as IdColumn From MyTable Where (....); 

Esto supone que tiene una columna llamada IdColumn en su mesa y que la propiedad "identidad" se ha establecido en "verdadero". Es decir, resalte el campo en el diseñador de tablas de SQL Server Management Studio y verá una ventana para las propiedades en la parte inferior.

Si la parte 'ABCD' puede cambiar, puede colocar este valor en otro campo y recuperar como tan:

Select PrefixField + '-' + Cast(IdColumn as varchar) as IdColumn From MyTable Where (....); 

Se podría, por supuesto, crear una vista para hacer esto para usted o incluso un campo calculado también. De esta forma, el valor de retorno está incorporado a la consulta y no tiene que recordar ingresar todo esto cada vez.

+0

Es decir, asumiendo que la parte 'ABCD' no se incrementa automáticamente también (pero estoy asumiendo lo hace). – Codesleuth

+0

Ahh ya veo. Buen truco. Gracias Mark. –

+1

Codesleuth: ¿cómo se incrementaría "ABCD"? ¿Estabas asumiendo que este era un número HEX? Con el tablero presente, pensé que era un prefijo fijo. Sin embargo, cambié mi respuesta para manejar los cambios en el prefijo. –

1

No debe usar una columna de IDENTIDAD, pero generó las identificaciones/cadenas usted mismo.

Mucho mejor formatear la columna de IDENTIDAD para mostrarla, especialmente si la parte de cadena es constante para todos los registros: hace que indexar/consultar más rendimiento y ahorre espacio de base de datos.

Si los registros pueden tener una sección de cadena diferente (es decir, no todos comienzan con "ABCD-"), entonces puede almacenar eso como un campo separado.

12

Además de las otras respuestas, puede crear un computed column en la tabla para proporcionar lo que está solicitando.

CREATE TABLE dbo.MyTable 
(
    Id int NOT NULL PRIMARY KEY, 
    CombinedId AS 'ABCD-' + CAST(Id as varchar(16)) 
) 

O:

CREATE TABLE dbo.MyTable 
(
    Id int NOT NULL PRIMARY KEY, 
    PrefixField varchar(16), 
    CombinedId AS PrefixField + CAST(Id as varchar(16)) 
) 

(Su pregunta no dice si el prefijo está destinada a ser fijada o no ...)

+0

¿Podría el detractor dejar un comentario? Gracias. –

+0

¿Las columnas incluidas en el Id combinado deben estar delante de la columna 'combinedId'? – MeRuud

1

Usted podría incrementar sus valores de cadena con una función de esta manera:

http://www.sqlservercentral.com/scripts/Miscellaneous/31448/

soy curioso, sin embargo, WH y está buscando utilizar una clave alfanumérica en lugar de solo una numérica.

+0

¿Fue el voto negativo de un enlace a SQLServerCentral? –

0

Comprobar las respuestas aquí ...

Increasing Alphanumeric value in user defined function

+0

¡Oh querido! ¿Cómo me atrevo a sugerir una solución y obtener una votación negativa anónima (como otras personas aquí) – gbn

+1

No veo ninguna razón para votar hacia abajo, su respuesta se refiere a la pregunta. algunas personas no sé cómo piensan. llevarlo a la normalidad – Kronass

Cuestiones relacionadas