我使用REXTESTER來編寫一段SQL Server代碼。排序規則衝突SQL Server varchar存儲過程參數
它說,它的SQL Server 2014 Express Edition的多數民衆贊成在使用...
這裏是最小的代碼,以使該消息。
CREATE PROCEDURE #CONVERT_TIME_TO_24_HR
(
@TIME_STRING varchar(4)
)
AS
BEGIN
DECLARE @AMPM as varchar(2);
SET @AMPM = RIGHT(@TIME_STRING,2);
IF @AMPM = 'am'
SELECT 2
END
GO
這裏的錯誤:
Error(s), warning(s):
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the equal to operation.
如果@TIME_STRING剛剛宣佈,而不是存儲過程我沒有問題的參數。由於我無法控制SQL Server實例,因此我該如何解決此問題?
這裏有一個forked version時,它不是一個參數 - 沒有任何問題
DECLARE @TIME_STRING varchar(4);
DECLARE @AMPM as varchar(2);
SET @AMPM = RIGHT(@TIME_STRING,2);
IF @AMPM = 'am'
SELECT 2
謝謝你一堆。它工作的一種享受。雖然不是很直觀。看起來奇怪的是你在IF上而不是在聲明上。特別是如果你有多個IF! – JGFMK
@JGFMK。 。 。這不是'如果'。它在不斷。我認爲使得常量具有與存儲數據相同的排序規則更明智,然後反過來。但是正如我想的那樣,常量會從變量聲明中得到不同的排序規則,這很奇怪。現在爲時過早,我覺得這太難了。 –
啊好吧...所以我也需要它在'pm'字面上... – JGFMK