Часть 1: В своей статье «Условия динамического поиска в T-SQL ... для SQL 2005 и более ранних версий» Эрланд Соммарског приводит пример использования динамического sql с sp_executesql.
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-оператор, имеет смысл, если вам нужно запустить только один sp_executesql дляваша @sql
переменная.
Однако предположим, что вы построили @sql
и вернули отфильтрованные записи, которые вы хотите вернуть, но вы также хотите COUNT
возвращенных записей.
Каков наилучший способ сделать это?
Нужно ли объявлять другую переменную, @sql_2
, сборка которой будет почти идентична @sql
, за исключением того, что оператор SELECT
в @sql_2
будет делать SELECT COUNT(*)...
вместо SELECT col1, col2, col3
?
Или есть лучший подход?