当传递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
答案 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)