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.
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é.
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
IF (OBJECTPROPERTY(OBJECT_ID('TABLE_NAME'), 'TableHasIdentity') = 1)
ObjectProperty
est disponible à partir de SQL Server 2008 Référence: OBJECTPROPERTY
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'
)
Je voudrais juste ajouter cette option ainsi que je pense que c'est la plus simple
SELECT COLUMNPROPERTY(OBJECT_ID('TableName'),'ColumnName','isidentity')
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".
@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).
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
... 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é
CREATE FUNCTION dbo.fnTableHasIdentity(@Tbl sysname)
RETURNS TINYINT
BEGIN
RETURN OBJECTPROPERTY(OBJECT_ID(@Tbl), 'TableHasIdentity')
END
--Aussi simple que cela!
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'