如何將存儲過程中的兩個SQL參數傳遞給WHERE子句中的查詢字符串?我遇到的問題是在@iField中。如果我刪除它並替換爲InfoID LIKE'%'+ @iSearch +'%',它可以工作,但我需要添加@iField。 WHERE CustomerID = @CustomerID AND @iField LIKE '%' + @iSearch + '%'
將存儲過程中的多個參數傳遞給QueryString參數
回答
T-SQL不允許你爲對象名稱設置變量(它會很方便,儘管如此,不會)。兩個選項確實如此:
1)使用動態SQL例如sp_executesql的(http://www.techrepublic.com/blog/datacenter/generate-dynamic-sql-statements-in-sql-server/306)
或
2)使用IF ... ELSE例如
IF @iField = 'InfoId'
SELECT ...
WHERE CustomerID = @CustomerID AND InfoId LIKE '%' + @iSearch + '%'
ELSE IF @iField = '<some other field>'
SELECT ...
WHERE CustomerID = @CustomerID AND <some other field> LIKE '%' + @iSearch + '%'
etc.
如果我理解正確的,你只是想在like
運營商限制在一個特定的列?
declare @yourTable table (i int, FirstName varchar(10), LastName varchar(10))
insert into @yourTable
select 1, 'john', 'doe' union all
select 2, 'jane', 'doe';
declare @iField varchar(10),
@iSearch varchar(10);
select @iField = 'FirstName',
@iSearch = 'j'
select *
from @yourTable
where (@iField = 'FirstName' and FirstName like '%' + @iSearch + '%') or
(@iField = 'LastName' and LastName like '%' + @iSearch + '%')
至於你是媒體鏈接使用過程
Declare @Query nvarchar(max)
Select @Query=
'
Select * from dbo.Invoice
WHERE CustomerID = '+Cast(@CustomerID as Varchar(20))
+' AND ['+ @iField +'] LIKE ''%' + @iSearch + '%''
'
--Print @Query
Exec(@Query)
感謝您的幫助。使用你的建議,我得到一個'無效的列名''+ @iField +''錯誤。 – 2013-04-05 16:17:28
@g_shockTan只是複製我的帖子我得到結果打印將顯示例如選擇* from dbo.Invoice WHERE CustomerID = 1並且[BillNr] LIKE'%aus%'嘗試使用print而不是Exec,可能會缺少引用... – bummi 2013-04-05 16:24:46
- 1. 將參數傳遞給存儲過程
- 2. 將多個參數傳遞給存儲過程
- 3. 傳遞參數給存儲過程
- 4. 將多個過濾參數傳遞給存儲的Proc
- 5. 將參數從存儲過程傳遞給函數(在存儲過程中)
- 6. 如何將QueryString參數傳遞給PageMethods?
- 7. 將多值參數傳遞給存儲過程
- 8. Informix:如何將單個參數中的多個值傳遞給存儲過程
- 9. 將動態數量的參數傳遞給存儲過程
- 10. 將可變數量的參數傳遞給存儲過程
- 11. 將存儲過程參數傳遞給ASP.Net中的Crystal Report
- 12. 將參數傳遞給c中的sql存儲過程#
- 13. 將值傳遞給存儲過程中的參數
- 14. 需要將存儲過程中的參數傳遞給sp_send_dbmail @query
- 15. 將查詢結果傳遞給存儲過程中的參數
- 16. 將一個布爾參數傳遞給SQL Server存儲過程
- 17. 將參數傳遞給存儲過程som檢索數據
- 18. 將函數作爲參數傳遞給存儲過程
- 19. 如何將數組參數傳遞給存儲過程?
- 20. 將參數傳遞給多個線程
- 21. 如何將多個參數傳遞到SQL Server存儲過程
- 22. 將多個參數傳遞到SQL Server存儲過程
- 23. 通過存儲過程傳遞參數
- 24. 將參數傳遞給ASP.NET的存儲過程WinForm
- 25. VBScript:將具有空值的參數傳遞給存儲過程?
- 26. 將參數傳遞給帶有VIEWS的存儲過程?
- 27. 將參數傳遞給MSSQL的錯誤存儲過程從PHP
- 28. 將參數傳遞給存儲過程(.net sdk)時的參數異常
- 29. 傳遞的CheckBoxList參數存儲過程
- 30. 如何將參數傳遞給返回多個記錄的存儲過程
基本上,我想知道是否有可能寫的WHERE子句爲:'WHERE @iField LIKE '%' + @iSearch + '%''。 – 2013-04-05 16:08:37
不,你不能用變量名取代列名,表名,過程名等,除非你建立一個sql字符串並像上面(1)中那樣動態地執行它。 – 2013-04-05 16:16:06
非常有趣的文章。謝謝你的鏈接。 – 2013-04-05 17:03:45