我想知道表是否有标识列。表对我来说是未知的。我还没有做表的结构。使用查询?
我使用的是 Sql Server Compact Edition。
IF (OBJECTPROPERTY(OBJECT_ID('TABLE_NAME'), 'TableHasIdentity') = 1)
ObjectProperty
从 sql server 2008 开始可用参考:
对象属性
此查询返回表的标识列名称:
CREATE PROCEDURE dbo.usp_GetIdentity
@schemaname nvarchar(128) = 'dbo'
,@tablename nvarchar(128)
AS
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
AND OBJECT_SCHEMA_NAME(object_id) = @schemaname
END
然后形成代码面。
使用 datareader 角色调用此存储过程,然后选中
datareader.hasrows()
。如果条件值为 true (1
),则表具有标识列(如果已设置)。如果没有,则它没有标识列。
我知道这是很久以前的事了,但我发现这很有帮助
试试这个:
IF EXISTS (SELECT * from syscolumns where id = Object_ID(@TABLE_NAME) and colstat & 1 = 1)
BEGIN
-- Do your things
END
以下任何查询都可用于检查表中是否存在身份列
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'
)
我只想添加这个选项,而且我认为这是最简单的
SELECT COLUMNPROPERTY(OBJECT_ID('TableName'),'ColumnName','isidentity')
实现此目的的一种方法是使用存储过程
sp_help
。即:
sp_help MyTable
这将返回一个数据集,其中包含表中所需的所有信息。有一个特定的表,其中包含有关身份的信息。
即:
如果不包含标识字段,标识列将显示:“未定义标识列”。
@Pranay:他说的是精简版。不支持存储过程,并且没有 sys.anything。
这是电话:
SELECT Count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE AUTOINC_INCREMENT IS NOT NULL AND TABLE_NAME='this_table'
它将返回 1(真)或 0(假)。
... 声明 @tblhasIdentCol bit = IF (IDENT_CURRENT( @dbName +'.'+ @schemaName +'.'+ @tableName ) IS NOT NULL , 1 , 0 )
如果表具有标识,您将获得数值
非常简单的答案就是运行这个:
SELECT IDENT_CURRENT('TABLE-NAME')
如果存在,这将给出标识列的最大值,如果该列不存在,则给出 1 作为结果。
根据最大值,您可以识别哪一列具有该值并确定标识列。
此查询获取所有表名、表的列名以及是否在所选数据库中
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
CREATE FUNCTION dbo.fnTableHasIdentity(@Tbl sysname)
RETURNS TINYINT
BEGIN
RETURN OBJECTPROPERTY(OBJECT_ID(@Tbl), 'TableHasIdentity')
END
--就这么简单!
select t.name as TableName,c.name as ColumnName
from sys.identity_columns c
inner join sys.tables t on c.object_id = t.object_id
where t.name = 'TableName'
如果您像我一样,需要能够对任意数据库中的表执行此操作,那么我找到了以下解决方案:
IF EXISTS (
SELECT 1
FROM [database name].sys.identity_columns AS id_col
INNER JOIN [database name].sys.objects
ON objects.object_id = id_col.object_id
INNER JOIN [database name].sys.schemas
ON schemas.schema_id = objects.schema_id
AND schemas.name = 'schema name'
WHERE OBJECT_NAME(id_col.object_id, DB_ID('database name')) = 'table name'
) SELECT 1 ELSE SELECT 0
如果当前表有标识列,则可以使用此函数获取 1 或 0 Boolean 表单
SELECT Count(Column_ID) FROM sys.identity_columns WHERE OBJECT_NAME(object_id) = 'tableName'
列出所有表及其标识列(如果存在)的一种方法 要获得所需的表格,请在过滤器末尾添加“
and o.name='TableName'
”
其中 Tbale Nam 就是您要找的桌子
SELECT o.[Name][TableName],i.[name][IdentityColName] FROM
sys.objects o
left outer join sys.identity_columns i on i.object_id=o.object_id
where o.type='U'
做到这一点的一种方法。
如果不存在(SELECT * FROM SYS.COLUMNS WHERE OBJECT_ID = OBJECT_ID('YOURTABLENAME') AND is_identity = 1)开始 -- 你的代码在这里 结束