使用游标的动态字段名称

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