传递where子句作为参数时返回零行的过程

时间:2016-12-30 07:27:51

标签: sql sql-server sql-server-2012

当传递where子句条件作为参数时,我的程序返回任何内容。下面是示例查询,我正在通过@strWhereClauseField& @strWhereClauseValue作为参数。当我在字符串中转换我的查询并执行它时,它工作正常。但我不想使用查询字符串,因为order by在查询字符串中不起作用。

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

试试这个:

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 '+@strWhereClauseField+'='+@strWhereClauseValue+''
EXEC (@QUERY)