DECLARE @TableName AS VARCHAR(250); DECLARE @SQL AS VARCHAR(500); DECLARE @ViewCheck as CURSOR; SET @ViewCheck = CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'VIEW' AND TABLE_NAME LIKE 'V_WFC%' OPEN @ViewCheck FETCH NEXT FROM @ViewCheck INTO @TableName WHILE @@FETCH_STATUS = 0 BEGIN Set @SQL = 'SELECT TOP 10 * FROM ' + @TableName PRINT(@SQL) EXEC(@SQL) FETCH NEXT FROM @ViewCheck INTO @TableName; END CLOSE @ViewCheck
我有一个游标,游标在特定模式下的所有SQL视图中运行,以检查它们是否继续起作用,是否与报表绑定以及是否将其用作ProSolution中的应用程序数据源。
这些视图之一被命名为 UnmarkedRegister(Today) ,用于将其与类似视图区分开来的括号,该视图在应用程序中用于驱动显示数据。
当查询按预期运行时,返回正确的数据-游标返回错误
消息208,级别16,状态1,第1行 无效的对象名称’V_WFC_UnmarkedRegister’
我想知道为什么在光标的EXEC(SQL)部分中省略了括号部分?
用途quotename():
quotename()
Set @SQL = 'SELECT TOP 10 * FROM ' + QUOTENAME(@TableName);