【发布时间】:2018-05-23 22:50:16
【问题描述】:
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) 部分中省略了括号部分?
【问题讨论】:
-
除非你有一些非常奇怪的对象名称,否则这真的不太可能烧毁你,但如果你实际上正在寻找名称以“V_WFC”开头的视图,那么请改用
LIKE 'V[_]WFC%'。方括号指示LIKE将下划线解释为文字字符;否则它是一个匹配任何单个字符的通配符。例如,一个名为VXWFC_UnmarkedRegister的视图将满足您原来的LIKE表达式。
标签: sql sql-server