2014-10-08 69 views
0

我正在創建以下存儲過程,該存儲過程應查找符合某些要求的WebPages表中的所有元素。首先,我產生了一些SQL查詢(動態):執行存儲過程中的多個SQL命令

DECLARE @SitesForScan TABLE 
(
    command nvarchar(1000) 
) 

INSERT INTO @SitesForScan(command) 
SELECT ('SELECT TOP ' + convert(varchar(10),[Credits]) + 
     ' * FROM [WebPages] pages WHERE pages.[WebSites_Id] = ' + 
      convert(varchar(10),[Id])) as "commnad" 
FROM [WebSites] 
WHERE [Credits] > 0 

之後,表變量@SiteForScan包含多個SQL命令。現在,我想執行這些命令中的每一個,將所有返回的結果合併並返回結果。

我該如何做到這一點?

+1

這是可能的,這可以被實現爲描述整個操作,而不是使用該當前片段的代碼來生成多個SQL,然後運行所有的SQL的一個查詢 - 你能提供一些示例數據和預期的結果? – 2014-10-08 12:03:28

回答

0

可以UES動態SQL EXECUTE您的SQL

DECLARE @SQL Nvarchar(MAX)=N'select * from @SitesForScan' 

EXEC sp_EXECUTESQL @SQL 
+0

沒有解決問題。我的@SitesForScan表包含許多行,每行都是有效的SQL語句。我想要執行它們中的每一個並將所有結果合併在一起。 – No1Lives4Ever 2014-10-08 11:46:42

+0

@ No1Lives4Ever可以顯示一些原始數據嗎?或插入'@ SitesForScan'後的表內容 – 2014-10-08 11:50:13

+0

該SP的返回值應該是結果行,它們是@SitesForScan每行執行的輸出結果行。 – No1Lives4Ever 2014-10-08 11:55:18

0

下面的語句使用標識列遊覽@SitesForScan表,以便我們可以使用while循環執行所有查詢。

DECLARE @SitesForScan TABLE 
(
    id int identity(1,1), 
    command nvarchar(1000) 
) 

INSERT INTO @SitesForScan(command) 
    SELECT ('SELECT TOP ' + convert(varchar(10),[Credits]) + ' * FROM [WebPages] pages WHERE pages.[WebSites_Id] = ' + convert(varchar(10),[Id])) as "commnad" 
     FROM [WebSites] 
     WHERE [Credits] > 0 

declare @i int=1,@sql nvarchar(max)='' 
while (@i<[email protected]@ROWCOUNT) 
begin 
set @sql=(select command from @SitesForScan where [email protected]) 

EXEC SP_EXECUTESQL @SQL 
set @sql='' 
set @[email protected]+1 
end 
0

從看什麼,你現在有,我認爲下面會產生你的目標了(一旦你填空)結果:

;With Ordered as (
    SELECT wp.*,ROW_NUMBER() OVER (
     PARTITION BY wp.Websites_Id 
     ORDER BY --I don't know what column to put here 
     ) as rn, 
     ws.Credits 
    FROM 
     WebSites ws 
      inner join 
     WebPages wp 
      on 
       ws.Id = wp.Websites_Id 
) 
SELECT * from Ordered where rn <= Credits 

此刻,你的查詢是從WebSites行將被檢索不確定性(因爲你用TOP沒有ORDER BY)。如果這是整個行動的重要組成部分,請告訴我。否則,請將我的查詢中的ORDER BY的實際列放入其中,並且您應該得到所需的結果。