用于测试主键是否存在的脚本

cdu*_*dub 4 sql sql-server sql-server-2005

试图找出一个SQL脚本来测试cerain表中是否存在主键.如果表没有主键,则脚本应输出表名.

Tables to test:
TableA
TableB
TableC
Run Code Online (Sandbox Code Playgroud)

运行脚本后(假设TableA和TableC有PK,但不是TableB),输出如下:

NoKeys
TableB
Run Code Online (Sandbox Code Playgroud)

Mat*_*att 8

我没有准确/完整的代码,但这里的想法是:

您需要遍历数据库中的表列表:

SELECT *  
FROM information_schema.tables`
Run Code Online (Sandbox Code Playgroud)

检查表是否存在主键的代码如下所示:

SELECT *  
FROM information_schema.table_constraints  
WHERE constraint_type = 'PRIMARY KEY'   
AND table_name = @Your_Table_Name`
Run Code Online (Sandbox Code Playgroud)


小智 7

没有主键返回0,有主键返回1

SELECT OBJECTPROPERTY(OBJECT_ID(N'MyTable'),'TableHasPrimaryKey')
Run Code Online (Sandbox Code Playgroud)


Sea*_*ean 6

;WITH tables_with_pk AS (
  SELECT t.table_schema, t.table_name  
  FROM INFORMATION_SCHEMA.TABLES t 
    INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc 
      ON t.TABLE_NAME = tc.TABLE_NAME AND t.table_schema = tc.table_schema
  WHERE tc.constraint_type = 'PRIMARY KEY'
)
SELECT t.table_schema, t.table_name 
FROM INFORMATION_SCHEMA.TABLES t 
EXCEPT
SELECT table_schema, table_name
FROM tables_with_pk
Run Code Online (Sandbox Code Playgroud)