@eraj
我得到了你的基本查询。
但是,我认为它不能完全按照您想要的方式完成,即将查询作为参数传递。这可以通过我感觉的两种方式来完成。
1) 用这个 SELECT 写一个游标并从游标内执行 SP。
DECLARE @p1 varchar(800);
DECLARE @p2 varchar(800);
DECLARE @p3 varchar(800);
DECLARE SP_Cursor CURSOR
FOR SELECT p1,p2,p3
FROM ..
OPEN SP_Cursor;
FETCH NEXT FROM SP_Cursor INTO @p1, @p2, @p3;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
EXEC SP_Name @p1,@p2,@p3;
FETCH NEXT FROM SP_Cursor INTO @p1, @p2, @p3;
END
CLOSE SP_Cursor;
DEALLOCATE SP_Cursor;
正如我所说,这会很慢,因为如果您的查询返回 1000 行,SP 每次都会执行 1000 次连接到数据库。
您可以通过将数据集放入 #temp_table 并通过 WHILE 循环循环来提高性能。至少每次连接到数据库时都会中断。
2) 第二种选择是通过 SELECT 查询构建执行语句本身。
declare @execstatementsbatch nvarchar(max)
select @execstatementsbatch = ''
SELECT @execstatementsbatch = @execstatementsbatch + 'EXEC SP_Name' + p1 + ', ' + p2 + ', ' + p3 + '; '
FROM..
<some conditions>
exec(@execstatementsbatch)
但请注意,如果您处理大量数据,两者的性能都不是很好。