[英]SQL Server: use Case statement for variable declaration
我有一個動態過程,帶有以下輸入變量:
@selection nvarchar(20),
@searchCategory nvarchar(100) = '',
@searchTerm nvarchar(256) = ''
該過程通常按預期方式工作-除以下內容外:如果searchCategory是“ dateRec
”,則dateRec
格式將是日期,而相應的列將是datetime,而對於其他所有內容,它們都是nvarchar。
SQL中有什么方法可以使用Case或If語句或其他方式進行變量聲明,以在@searchCategory =“ dateRec
”時將最后一個變量設置為@searchTerm datetime
,並且僅在所有其他情況下,將其設置為@searchTerm nvarchar(256)
如上?
蒂姆,非常感謝您對此提供的任何幫助。
您應該使用類型datetime
的其他變量,然后在WHERE
使用CASE
, IF
或條件集來選擇要使用的變量。
@selection nvarchar(20),
@searchCategory nvarchar(100) = '',
@searchTerm nvarchar(256) = '',
@searchTerm2 datetime = ''
1)如果無法更改該存儲過程的參數,則可以使用兩個具有正確數據類型的局部變量,從而:
...
DECLARE @localSearchTermDT DATETIME,
@localSearchTermCHR NVARCHAR(256);
IF @searchCategory = 'dateRec'
SET @localSearchTermDT = CONVERT(DATETIME, @searchTerm, ...)
ELSE
SET @localSearchTermCHR = @searchTerm;
注意:此解決方案將阻止參數嗅探。
2)另一個解決方案是使用CAST / CONVERT這樣:
...
Column1DT = CASE WHEN @searchCategory = 'dateRec' THEN CONVERT(DATETIME, @searchTerm, ...) END
...
Column2CHR = CASE WHEN @searchCategory <> 'dateRec' THEN @searchTerm END
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.