выполнить sql, возвращенный в запросе sql - PullRequest
0 голосов
/ 29 сентября 2011

У меня есть запрос к базе данных сервера SQL, который создает оператор SQL для каждой строки возвращаемого запроса.

EG.

DROP PROCEDURE dbo.[Proc1]
DROP PROCEDURE dbo.[Proc2]

и т. Д.

В том же сценарии, как я могу выполнить sql, возвращенный в запросе?

Ответы [ 4 ]

4 голосов
/ 29 сентября 2011

Оформить sp_executesql

3 голосов
/ 29 сентября 2011

Одним из способов является то, что вам придется перебирать свой набор результатов и использовать sp_executesql .Просто любопытно, что вы пытаетесь достичь

2 голосов
/ 29 сентября 2011

Выведите результаты в переменную типа varchar (max) или nvarchar (max), а затем EXEC их

-- Create a terrible, horrible cursor to run the statements
-- You have just now killed a kitten
DECLARE Csr cursor for
SELECT
    P.name AS proc_name
,   schema_name(P.schema_id) AS schemaname
FROM
    sys.procedures P


DECLARE @query varchar(max), @proc_name sysname, @schema sysname

OPEN Csr
FETCH NEXT FROM Csr INTO
    @proc_name, @schema

WHILE (@@fetch_status <> -1)
BEGIN
    IF (@@fetch_status <> -2)
    BEGIN
        BEGIN TRY
            -- build out the drop statement, may not be necc
            SET @query = 'DROP PROCEDURE' + QUOTENAME(@schema) + '.' + QUOTENAME(@proc_name)
            -- Actually run the dynamic query
            EXECUTE(@query)
        END TRY
        BEGIN CATCH
            -- Be good and note what failed, fix this manually
            PRINT 'This query failed'
            PRINT @query
        END CATCH
        FETCH NEXT FROM Csr INTO
            @proc_name, @schema
    END
END

CLOSE Csr
DEALLOCATE Csr
1 голос
/ 29 сентября 2011

Что вам нужно сделать, это вывести ваш запрос в переменную. Если вы используете хранимую процедуру, укажите выходной параметр varchar. Затем, когда вы вызываете хранимую процедуру для генерации SQL-запроса, просто передайте эту переменную varchar в sp_executesql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...