Dynamic Where Clause - некоторые переменные не передаются - PullRequest
0 голосов
/ 20 марта 2012

Мне было интересно, сработает ли приведенный ниже сценарий?У меня проблемы с этим.

У меня есть смарт-тег SQLDataSource с таким запросом:

    SELECT [col1], [col2], [col3] FROM [Table1] WHERE (@SubType = @SubID) ORDER BY [col1] ASC

Независимо от того, где или как я установил параметр @SubType, он не работаетТем не менее, если я изменю запрос на WHERE [col1] = @SubID (удаляя @SubType), он будет работать нормально.

Могу ли я установить параметр в качестве имени поля для сравнения, как мой запрос?

Ответы [ 2 ]

3 голосов
/ 20 марта 2012

Это не так, как работают параметры.Параметры не являются заменой строк.Они работают со значениями, а не с именами объектов базы данных (столбцы, таблицы и т.*

2 голосов
/ 20 марта 2012

Если вы хотите динамически заменить элементы в вашем предложении WHERE, тогда вам нужно взглянуть на использование Динамический SQL , тогда вы можете построить свой SQL в виде строки и выполнить его.

Пример кода от http://www.sommarskog.se/dynamic_sql.html

DECLARE @sql nvarchar(2000)
SELECT @sql = 'SELECT O.OrderID, SUM(OD.UnitPrice * OD.Quantity)
               FROM   dbo.Orders O
               JOIN   dbo.[Order Details] OD ON O.OrderID = OD.OrderID
               WHERE  O.OrderDate BETWEEN @from AND @to
                 AND  EXISTS (SELECT *
                              FROM   dbo.[Order Details] OD2
                              WHERE  O.OrderID = OD2.OrderID
                                AND  OD2.ProductID = @prodid)
                GROUP  BY O.OrderID'
EXEC sp_executesql @sql, N'@from datetime, @to datetime, @prodid int',
                   '19980201', '19980228', 76

Еще одна полезная ссылка:

Динамическое предложение WHERE

...