我有一个针对sql server数据库运行的查询,该数据库为返回的查询的每一行生成一个sql语句。
EG。
DROP PROCEDURE dbo.[Proc1]
DROP PROCEDURE dbo.[Proc2]
等
在同一个脚本中,如何执行查询中返回的sql?
答案 0 :(得分:4)
答案 1 :(得分:3)
一种方法是,您必须遍历结果集并使用sp_executesql。但是好奇,你想要完成什么
答案 2 :(得分:2)
将结果转储到varchar(max)或nvarchar(max)类型的变量中,然后执行它们
-- 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
答案 3 :(得分:1)
您需要做的是将查询输出到变量中。如果使用存储过程,则指定varchar的输出参数。然后,当您调用存储过程生成SQL查询时,只需将该varchar变量传递给sp_executesql
。