簡體   English   中英

SQL Server:使用Case語句進行變量聲明

[英]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使用CASEIF或條件集來選擇要使用的變量。

@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM