使用游标的动态字段名称
Dynamic Field Name Using Cursor
我正在尝试打印每个模式中的字段列表并 table 动态。因为我需要打印以供进一步参考而不是 table,所以我使用光标将它们打印出来,如下所示:
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
但我一遍又一遍地收到这个错误:
Must declare the scalar variable "@TableSchema".
我在这里错过了什么?
您需要使用变量来连接您的动态字符串,而不是它的一部分。像这样:
EXECUTE('
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA= ''' + @TableSchema + '''
AND TABLE_NAME= ''' + @TableName + '''
')
为什么不能直接写
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
另外我认为你需要在 CURSOR 中使用这个
DECLARE AutoFields CURSOR
FOR
SELECT TABLE_SCHEMA,TABLE_NAME
FROM INFORMATION_SCHEMA.tables --Not Columns
我正在尝试打印每个模式中的字段列表并 table 动态。因为我需要打印以供进一步参考而不是 table,所以我使用光标将它们打印出来,如下所示:
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
但我一遍又一遍地收到这个错误:
Must declare the scalar variable "@TableSchema".
我在这里错过了什么?
您需要使用变量来连接您的动态字符串,而不是它的一部分。像这样:
EXECUTE('
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA= ''' + @TableSchema + '''
AND TABLE_NAME= ''' + @TableName + '''
')
为什么不能直接写
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
另外我认为你需要在 CURSOR 中使用这个
DECLARE AutoFields CURSOR
FOR
SELECT TABLE_SCHEMA,TABLE_NAME
FROM INFORMATION_SCHEMA.tables --Not Columns