2014-09-05 51 views
0

我在T-SQL中有一個用戶定義的函數,它在內部使用CHARINDEX()。我將@caseSensitivity(bit)參數作爲輸入,它應該決定CHARINDEX()函數的大小寫(整理)。有沒有辦法做到這一點,而不是每次發生CHARINDEX()兩個if-構造?用戶定義函數中的CaseSensitivity T-SQL

+1

你可以發佈代碼示例嗎? – Jace 2014-09-05 16:58:02

+0

你考慮過'CASE'而不是'IF'嗎?取決於你的邏輯。 – Tak 2014-09-05 18:20:26

+0

@t_m,使用案例不會做很多好事,因爲它會產生相同數量和質量的代碼。 – zhulien 2014-09-09 08:29:24

回答

1

不幸的是,有isn't a way to set a connection-level collation override,如果這就是你在想什麼(我是)。但是,如果您只是想方便地控制這一點,那麼您可以評估所有CHARINDEX查找區分大小寫,然後使用UPPER使其在@時不區分大小寫, caseSensitive爲零:

DECLARE @caseSensitivity BIT = 1 
DECLARE @input VARCHAR(3) = 'Abc' 
DECLARE @inputCheck VARCHAR(3) = 'B' 

IF @caseSensitivity = 0 
BEGIN 
    SET @input = UPPER(@input) 
    SET @inputCheck = UPPER(@input) 
END 

SELECT CHARINDEX(@inputCheck COLLATE SQL_Latin1_General_CP1_CS_AS, @input COLLATE SQL_Latin1_General_CP1_CS_AS, 0) 
+0

這實際上是一個很好的解決方案。我正在尋找那樣的東西。謝謝! – zhulien 2014-09-09 08:21:35

+0

非常歡迎! – 2014-09-09 09:00:37