遍历所有表格

FNR*_*FNR 1 sql t-sql sql-server

我正在寻找一种迭代数据库中所有表的方法.

到目前为止我已经想出了这个:

DECLARE @TableName VARCHAR(MAX)

DECLARE MyCursor CURSOR 
    FOR
        SELECT 
        DISTINCT TABLE_NAME 
        FROM INFORMATION_SCHEMA.COLUMNS 
        WHERE TABLE_CATALOG ='MyDB' 
        AND TABLE_SCHEMA=N'dbo'

OPEN MyCursor

FETCH NEXT FROM MyCursor INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
    SELECT *
    FROM @TableName
    FETCH NEXT FROM MyCursor INTO @TableName
END 
CLOSE MyCursor
DEALLOCATE MyCursor
Run Code Online (Sandbox Code Playgroud)

我在While语句中收到一条错误消息The @TableName tablevariable must be declared(从德语翻译).

我知道应该有类型的变量TABLEFROM @TableName,但我还没有找到如何做到这一点,只是如何声明,我不希望有新表.

Squ*_*rel 5

你不能 SELECT * FROM @TableName

您将需要使用动态SQL

declare @sql nvarchar(max)

SELECT @sql = 'SELECT * FROM ' + QUOTENAME(@TableName)

exec sp_executesql @sql
Run Code Online (Sandbox Code Playgroud)