第2部分:在他的文章「T-SQL中的動態搜索條件... for SQL 2005及更早版本」中,Erland Sommarskog給出了一個如何通過sp_executesql使用動態sql。動態SQL,sp_executesql和重建動態sql語句 - 第2部分
http://www.sommarskog.se/dyn-search-2005.html#sp_executesql
SELECT @sql = -- 19
'SELECT o.OrderID, o.OrderDate, od.UnitPrice, od.Quantity, -- 20
c.CustomerID, c.CompanyName, c.Address, c.City, -- 21
c.Region, c.PostalCode, c.Country, c.Phone, -- 22
p.ProductID, p.ProductName, p.UnitsInStock, -- 23
p.UnitsOnOrder -- 24
FROM dbo.Orders o -- 25
JOIN dbo.[Order Details] od ON o.OrderID = od.OrderID -- 26
JOIN dbo.Customers c ON o.CustomerID = c.CustomerID -- 27
JOIN dbo.Products p ON p.ProductID = od.ProductID -- 28
WHERE 1 = 1' -- 29
-- 30
IF @orderid IS NOT NULL -- 31
SELECT @sql = @sql + ' AND o.OrderID = @xorderid' + -- 32
' AND od.OrderID = @xorderid' -- 33
-- 34
IF @fromdate IS NOT NULL -- 35
SELECT @sql = @sql + ' AND o.OrderDate >= @xfromdate' -- 36
等等
在另一個article上dyanmic SQL中,他寫道:在動態SQL創建
臨時表不會從調用訪問過程,因爲它們在動態SQL退出時被刪除。
所以我的問題都是圍繞着這個問題:如果你已經建立了動態SQL語句 一次,並在@sql
回報COL1,COL2,COL3,COL4 SELECT語句等, 你應該怎麼如果您必須以不同的方式重新查詢相同的結果集,請執行操作嗎?例如,如果必須返回另一個具有COUNT且按col1, 和另一個結果集(按col2分組的COUNT結果集)的結果集,或者返回基於從原始@sql
開始的結果集的其他結果集?
您是否必須重新爲每種不同場景重新構建@sql, 因此您最終會得到@sql,@ sql_2,@ sql_3,...?
在這種情況下,動態sql仍然是最好的選擇,否則會更好地使用靜態sql插入到#temp表中,這樣你可以 重新查詢#temp表結果嗎?
這不是因爲使用CREATE語句,但由於是動態SQL – 2011-02-06 01:56:02