我试图动态地打印每个架构和表中的字段列表。因为我需要打印以供进一步参考而不是表格,所以我使用光标将它们打印出来,如下所示:
DECLARE AutoFields CURSOR
FOR
SELECT TABLE_SCHEMA,TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
OPEN AutoFields
DECLARE @TableSchema NVARCHAR(100)
DECLARE @TableName NVARCHAR(100)
FETCH NEXT
FROM AutoFields
INTO @TableSchema,@TableName
WHILE @@FETCH_STATUS = 0
BEGIN
EXECUTE('
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA=@TableSchema
AND TABLE_NAME=@TableName
')
FETCH NEXT
FROM AutoFields
INTO @TableSchema,@TableName
END
CLOSE AutoFields
DEALLOCATE AutoFields
但我一遍又一遍地得到这个错误:
必须声明标量变量" @ TableSchema"。
我在这里缺少什么?
答案 0 :(得分:1)
您需要使用变量来连接动态字符串,而不是它的一部分。像这样:
EXECUTE('
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA= ''' + @TableSchema + '''
AND TABLE_NAME= ''' + @TableName + '''
')
答案 1 :(得分:1)
为什么你不能写
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
我认为你需要在CURSOR
中使用它DECLARE AutoFields CURSOR
FOR
SELECT TABLE_SCHEMA,TABLE_NAME
FROM INFORMATION_SCHEMA.tables --Not Columns