【问题标题】:Issue with accessing variable in Nested Cursors访问嵌套游标中的变量的问题
【发布时间】:2018-11-30 05:10:40
【问题描述】:

我从 sys 表中获取一组表名,并尝试遍历它们以从中获取列,然后附加到动态 SQL 中的字符串。

我遇到语法问题。请帮我。 我试图将 @tablename 传递给 select * 语句,但它不喜欢它。请帮帮我

                DECLARE @col [VARCHAR](100);
            DECLARE @TableCursor AS CURSOR;


            SET 
            @TableCursor = CURSOR FOR
               SELECT   st.TABLE_NAME
               FROM     INFORMATION_SCHEMA.TABLES st
               WHERE    REPLACE(st.TABLE_NAME, 'TEST' + '_' + 'PIV' + '_', '') = 'Marketing_campaign'
                        AND st.TABLE_SCHEMA = 'DV';
            DECLARE @Tablename VARCHAR(100);

            OPEN @TableCursor;
            FETCH NEXT FROM @TableCursor 
                INTO @Tablename;

            WHILE @@FETCH_STATUS = 0
                BEGIN
                    DECLARE @colCursor AS CURSOR;

                    SET @colCursor = CURSOR FOR
                        SELECT * FROM  @Tablename; ****** this is where its complaining****

                    OPEN @colCursor;
                    FETCH NEXT FROM @colCursor 
                        INTO @col;
                    WHILE @@FETCH_STATUS = 0
                        BEGIN
                            CLOSE @colCursor;
                            DEALLOCATE @colCursor;

                        END;
                    FETCH NEXT FROM @TableCursor
                    INTO @Tablename;
                END;

            CLOSE @TableCursor;
            DEALLOCATE @TableCursor;

【问题讨论】:

    标签: sql


    【解决方案1】:

    您正在从@Tablename 中选择 但在@Tablename 的定义中它是 varchar(100) 您不能从 varchar 中选择

    如果你想选择你需要从表中选择

    看看这个,它可能会有所帮助 Table name as variable

    【讨论】:

    • 您好,感谢您的快速回复。我什至试过这个 EXEC('SELECT * FROM ' + @tablename) 但在执行时说错误
    • 你不能用光标使用EXEC,看看这个stackoverflow.com/questions/1045880/…
    猜你喜欢
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 2015-08-10
    • 2015-08-13
    • 2022-06-23
    相关资源
    最近更新 更多