2016-12-30 50 views
0

當通過where子句條件作爲參數時,我的程序沒有返回任何東西。以下是示例查詢,我將@strWhereClauseField & @strWhereClauseValue作爲參數傳遞。它工作正常,當我在字符串中轉換我的查詢並執行它。但我不想使用查詢字符串,因爲order by在查詢字符串中不起作用。當通過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

嘗試這個:

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包含在字符串中,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''不起作用。刪除表前綴或使用別名。 –