Как выполнить запрос, сгенерированный в CTE

У меня есть CTE, в котором генерируется оператор SELECT, но 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 )

Проблема не будет решена, если я раскомментирую оператор SELECTпосле CTE.

Цель этого запроса — найти все экземпляры GUID в базе данных. В настоящее время я решаю эту проблему, используя скрипт типа this . Однако я был бы счастлив решить эту проблему, не перебирая строки, используя операции над множествами и другие методы.

5
задан Sina Iravanian 26 July 2012 в 05:51
поделиться