web-dev-qa-db-fra.com

Comment savoir si la table a une colonne d'identité

Je veux savoir si la table a une colonne d'identité ou non. La table m'est inconnue. Je n'ai pas fait la structure de la table. Vous utilisez Query?

J'utilise Sql Server Compact Edition.

31
Shiny

Il s'agit de la requête qui renvoie le nom de la colonne d'identité;

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

Ensuite, formez le côté code.

Appelez cette procédure stockée à l'aide du rôle de datareader, puis cochez datareader.hasrows(). Si la valeur de la condition est vraie (1), La table a une colonne d'identité si elle est définie. Sinon, il n'a pas de colonne d'identité.

20
Pranay Rana

Je sais que c'est il y a longtemps mais j'ai trouvé cela utile

essaye ça :

IF EXISTS (SELECT * from syscolumns where id = Object_ID(@TABLE_NAME) and colstat & 1 = 1)
BEGIN
   -- Do your things
END
13
Wahid Bitar
IF (OBJECTPROPERTY(OBJECT_ID('TABLE_NAME'), 'TableHasIdentity') = 1) 

ObjectProperty est disponible à partir de SQL Server 2008 Référence: OBJECTPROPERTY

9
h3n

N'importe laquelle des requêtes ci-dessous peut être utilisée pour vérifier si une colonne d'identité est présente dans le tableau

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'
    )
8
Bhavneet

Je voudrais juste ajouter cette option ainsi que je pense que c'est la plus simple

SELECT COLUMNPROPERTY(OBJECT_ID('TableName'),'ColumnName','isidentity')
4
johnmcp

Une façon de le faire serait d'utiliser la procédure stockée sp_help. C'est à dire:

sp_help MyTable

Cela renverra un DataSet contenant toutes les informations dont vous auriez besoin sur la table. Il existe un tableau spécifique contenant des informations sur les identités.

C'est à dire:

S'il ne contient pas de champ d'identité, la colonne Identité indiquera: "Aucune colonne d'identité définie".

3
Kyle Rozendo

@Pranay: il a dit Compact Edition. Les procédures stockées ne sont pas prises en charge et il n'y a rien de sys.anything.

Voici l'appel:

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

Il renverra 1 (vrai) ou 0 (faux).

2
Patrick

C'est la requête qui récupère tous les noms de table, les noms de colonne de la table et qui est ou non dans la base de données sélectionnée

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
1
Aravind Goud

... déclare @tblhasIdentCol bit = IIF (IDENT_CURRENT (@dbName + '.' + @schemaName + '.' + @tableName) IS NOT NULL, 1, 0)

Yuu obtient la valeur NULL ou numérique si la table a une identité

0
johnj1234
CREATE FUNCTION dbo.fnTableHasIdentity(@Tbl sysname)
RETURNS TINYINT
BEGIN 
  RETURN OBJECTPROPERTY(OBJECT_ID(@Tbl), 'TableHasIdentity')
END 

--Aussi simple que cela!

0
user3415785

vous pouvez obtenir le formulaire 1 ou 0 booléen si la table actuelle a des colonnes d'identité en utilisant ceci

SELECT Count(Column_ID) FROM sys.identity_columns WHERE OBJECT_NAME(object_id) = 'tableName'
0