2010-05-20 7 views
15

Quiero averiguar si la tabla tiene una columna de identidad o no. La mesa es desconocida para mí. No he hecho la estructura de la mesa. ¿Usando Query?Cómo identificar si la tabla tiene columna de identidad

Estoy utilizando SQL Server Compact Edition.

+5

no se olvide de marcar la respuesta como aceptar si obtuvo la información que desea –

+0

Vea también [¿Cómo se determina qué tablas SQL tienen una columna de identidad de forma programática] (http://stackoverflow.com/q/87747) –

Respuesta

14

Esta es la consulta que devuelven la identidad nombre de la columna;

create procedure GetIdentity 
@tablename varchar(50) 
begin 
    SELECT OBJECT_NAME(OBJECT_ID) AS TABLENAME, 
      NAME AS COLUMNNAME, 
      SEED_VALUE, 
      INCREMENT_VALUE, 
      LAST_VALUE, 
      IS_NOT_FOR_REPLICATION 
    FROM  SYS.IDENTITY_COLUMNS 
    WHERE OBJECT_NAME(OBJECT_ID) = @tablename 
end 

Luego, forme el lado del código.

llamar a este procedimiento almacenado utilizando el papel datareader, a continuación, comprobar datareader.hasrows(). Si el valor de condición es verdadero (1), entonces la tabla tiene una columna de identidad si está configurada. Si no, entonces no tiene una columna de identidad.

+0

por favor ¿Puedes elaborar sobre esta consulta? Gracias – Shiny

+0

check th answer now –

3

Una forma de hacer esto sería hacer uso del procedimiento almacenado sp_help. Es decir:

sp_help MyTable 

Esto devolverá un DataSet que tiene toda la información que necesitaría en la tabla. Hay una tabla específica que tiene información sobre identidades.

es decir:

Si no contiene un campo de identidad, la columna de identidad va a decir: "No columna de identidad definida".

+0

Añadiré que puede resaltar el nombre de la tabla y luego usar el combo de teclado ALT + F1 como atajo para esto cuando esté en SSMS. –

2

@Pranay: dijo Compact Edition. Los procedimientos almacenados no son compatibles, y no hay ningún sistema.

Esta es la llamada:

SELECT Count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE AUTOINC_INCREMENT IS NOT NULL AND TABLE_NAME='this_table'

Se devolverá o bien 1 (verdadero) o 0 (falso).

+0

no funciona para mí, no hay columna "AUTO_INC_INCREMENT" –

+0

Tiene un guión bajo adicional – Patrick

6

cualquiera de las consultas a continuación pueden utilizarse para comprobar si una columna de identidad está presente en la tabla

1)

SELECT * 
FROM sys.identity_columns 
WHERE OBJECT_NAME(object_id) = 'TableName' 

2)

SELECT * 
FROM sys.identity_columns 
WHERE object_id = (
     SELECT id 
     FROM sysobjects 
     WHERE name = 'TableName' 
    ) 
9

Sé que es mucho tiempo Hace pero encontré esto útil

intente esto:

IF EXISTS (SELECT * from syscolumns where id = Object_ID(@TABLE_NAME) and colstat & 1 = 1) 
BEGIN 
    -- Do your things 
END 
1

Esta la consulta que consigue u todos los nombres de tablas, columnnames de la tabla, y is_identity o no en la base de datos seleccionada

SELECT 
    sys.columns.name 
    , sys.tables.name 
    , is_identity 
FROM sys.columns 
INNER JOIN sys.tables ON sys.tables.object_id = sys.columns.object_id 
    AND sys.columns.is_identity = 1 
3
IF (OBJECTPROPERTY(OBJECT_ID('TABLE_NAME'), 'TableHasIdentity') = 1) 

ObjectProperty comenzando SQL Server 2008 Referencia: OBJECTPROPERTY

4

Me gustaría agregar esta opción y creo que es la más simple

SELECT COLUMNPROPERTY(OBJECT_ID('TableName'),'ColumnName','isidentity') 
+0

Estoy de acuerdo con @johnmcp. Esta opción es realmente simple y devuelve 1 cuando la columna es identidad y 0 cuando la columna no es una columna de identidad – Rajat

Cuestiones relacionadas