2016-12-30 3 views
0

Моя процедура ничего не возвращает, когда передается условие условия в качестве параметра. Ниже приведен пример запроса, и я прохожу @strWhereClauseField & @strWhereClauseValue в качестве параметра. Он отлично работает, когда я конвертирую свой запрос в строку и выполняю его. Но я не хочу использовать строку запроса, потому что порядок не работает в строке запроса.Процедура, возвращающая нулевые строки при передаче where в качестве параметра

DECLARE @Data TABLE 
(
    Id int identity(1,1), Product varchar(10) 
) 

INSERT @Data VALUES ('HP2030'), ('HP2031'), ('HP2032'), ('HP2033'); 

DECLARE @strWhereClauseField NVARCHAR(1000) = '1' 
DECLARE @strWhereClauseValue NVARCHAR(1000) = '1' 

SET @strWhereClauseField = '@Data.Product' 
SET @strWhereClauseValue = '''HP2030''' 

SELECT * 
FROM @Data 
WHERE @strWhereClauseField = @strWhereClauseValue 

ответ

0

Try это:

DECLARE @strWhereClauseField NVARCHAR(1000) = '1' 
DECLARE  @strWhereClauseValue NVARCHAR(1000) = '1' 
DECLARE @QUERY VARCHAR(MAX) 

SET @strWhereClauseField='Product' 
SET @strWhereClauseValue='''HP2030''' 

SET @QUERY = 'DECLARE @Data TABLE 
(
Id int identity(1,1) 
,Product varchar(10) 
) 
INSERT @Data VALUES 
(''HP2030''); 
INSERT @Data VALUES 
(''HP2031''); 
INSERT @Data VALUES 
(''HP2032''); 
INSERT @Data VALUES 
(''HP2033''); 
SELECT * FROM @Data WHERE '[email protected]+'='[email protected]+'' 
EXEC (@QUERY) 
+0

ценят ваш ответ, но я не могу использовать строку запроса, потому что порядок не работает в строке запроса, а мой исходный запрос усечен из-за его длины. – user1891251

+0

@ user1891251 'ORDER BY' отлично работает, если вы включили его в строку. И точно, как долго ваш запрос, чтобы он не вписывался в 'varchar (max)'? –

+0

Длина 5000, но может варьироваться в зависимости от параметров – user1891251

0

К сожалению, то, что вы делаете, не будет работать в SSMS (SQL Server Management Studio), как SSMS видит запрос как так:

SELECT * FROM @Data WHERE '@Data.Product' = '''HP2030''' 

Попробуйте следующее:

DECLARE @Data TABLE 
(
    Id int identity(1,1), Product varchar(10) 
) 

INSERT @Data VALUES ('HP2030'), ('HP2031'), ('HP2032'), ('HP2033'); 

DECLARE @strWhereClauseField NVARCHAR(1000) = '@Data.Product' 
DECLARE @strWhereClauseValue NVARCHAR(1000) = '''HP2030''' 
DECLARE @strOrderByColumn NVARCHAR(1000) = 'Product' 


DECLARE @sql VARCHAR(MAX) = 'SELECT * FROM @Data WHERE ' + @strWhereClauseField + '=' + @strWhereClauseValue + ' ORDER BY ' + @strOrderByColumn 

EXEC sp_executesql(@sql) 
+0

Только 'EXEC (@sql)' У вас также есть проблема, что область, в которой выполняется 'EXEC (@sql)', не имеет доступа к переменной таблицы. Вам нужно будет использовать более «доступную» таблицу или объявление таблицы обертки и загрузку в '@ sql'. Наконец' @WhereClauseField == '@ Data.Product' не работает. Либо снимите префикс таблицы, либо используйте псевдоним. –

Смежные вопросы