第1部分:在他的文章「T-SQL中的動態搜索條件... for SQL 2005及更早版本」中,Erland Sommarskog給出了一個如何通過sp_executesql使用動態sql。動態SQL,sp_executesql和重建動態sql語句 - 第1部分
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
等等
因此,當你建立你的動態SQL語句,它是有道理的,如果你必須爲你的@sql
變量只運行一個sp_executesql的。
但是,假設您已經構建了您的@sql
,並且返回了您想要返回的篩選記錄,但是您還希望返回記錄的COUNT
。
要做到這一點,最好的方法是什麼?
你就必須聲明另一個變量,@sql_2
,其建設將是幾乎相同@sql
,除了在@sql_2
的SELECT
聲明會做SELECT COUNT(*)...
而不是SELECT col1, col2, col3
?
還是有更好的方法?
既然您正在返回記錄,您爲什麼不重新審覈之後纔會依靠這些記錄? – 2011-02-05 03:31:40