如何执行CTE中生成的查询

Sin*_*ian 5 sql sql-server common-table-expression

我有一个SELECT生成语句的CTE ,但是SQL Server(2012)不允许对其进行调用EXEC。这是查询:

DECLARE @guidToFind uniqueidentifier = 'E4069560-091A-4026-B519-104F1C7693B3';

WITH GuidCols (TableName, ColName, Query) As
(
    SELECT  
        C.TABLE_NAME, 
        C.COLUMN_NAME, 
        'SELECT ' + 
             QUOTENAME(C.TABLE_NAME) + '.' + 
             QUOTENAME(C.COLUMN_NAME) + ' 
        FROM ' + 
             QUOTENAME(C.TABLE_NAME) + ' 
        WHERE ' + 
           QUOTENAME(C.COLUMN_NAME) + ' = ''' + cast(@guidToFind AS VARCHAR(50))+
           ''''
    FROM 
        INFORMATION_SCHEMA.COLUMNS C 
        INNER JOIN INFORMATION_SCHEMA.TABLES T 
        ON C.TABLE_NAME = T.TABLE_NAME AND 
           T.TABLE_TYPE = 'BASE TABLE'
    WHERE 
        C.DATA_TYPE = 'uniqueidentifier'
)
-- SELECT * FROM
EXEC( GuidCols.Query )
Run Code Online (Sandbox Code Playgroud)

如果我SELECT在CTE之后取消注释,则无法解决问题。

该查询的目的是在数据库中查找GUID的所有实例。目前,我正在使用类似这样的脚本解决此问题。但是,我将更乐于解决此问题,而无需使用设置操作和其他技术遍历行。

Mik*_*son 5

您不能将其exec用作CTE.

来自WITH common_table_expression (Transact-SQL)

CTE 后面必须跟一个引用部分或全部 CTE 列的 SELECT、INSERT、UPDATE 或 DELETE 语句。

您可以做的是将查询的结果存储在临时表中,遍历行并一次执行一个语句。