sqlserver存储过程获取包含标识列(自增列)的所有表名
直接上代码吧,主要包含两个重要的对象或方法,一个是SYS.TABLES,一个是OBJECTPROPERTY。具体用法不做展开。
/*
** 检查数据库中表是否有标识列
** 以打印的方式输出
**/
ALTER PROCEDURE [dbo].[YJ_CHECK_TABLE_PK]
AS
BEGIN
--存储表名
DECLARE @TABLE_NAME VARCHAR(100) = '';
--表是否有标识列,1有0无
DECLARE @PK_TAG NUMERIC = -99;
--获取所有表名的游标
DECLARE CUR_CHECK CURSOR FOR SELECT NAME FROM SYS.TABLES;
OPEN CUR_CHECK ;
FETCH NEXT FROM CUR_CHECK INTO @TABLE_NAME;
WHILE @@fetch_status<>-1
BEGIN
SELECT @PK_TAG = OBJECTPROPERTY(OBJECT_ID(@TABLE_NAME),'TableHasIdentity');
IF(@PK_TAG=0)
BEGIN
PRINT UPPER(@TABLE_NAME) + ' 没有标识列'
END
/*
ELSE IF(@PK_TAG=1)
BEGIN
PRINT @TABLE_NAME + ' 有标识列'
END
ELSE
BEGIN
PRINT 'ERROR OCCURED'
END
*/
FETCH NEXT FROM CUR_CHECK INTO @TABLE_NAME;
END
END
运行结果截图: