我遇到GUID問題,我已經縮小到LIKE
運算符看起來像一個問題。SQL Server GUID有時有效並且有時不是
當以下是我的服務器
DECLARE @Problem NVARCHAR(1000) = N'58C21BC6-081B-4E57-BFE1-5B11AAC662F1';
DECLARE @GuidPattern NVARCHAR(1000) =
REPLICATE('[0-9A-Fa-f]', 8)
+ '-'
+ REPLICATE('[0-9A-Fa-f]', 4)
+ '-'
+ REPLICATE('[0-9A-Fa-f]', 4)
+ '-'
+ REPLICATE('[0-9A-Fa-f]', 4)
+ '-'
+ REPLICATE('[0-9A-Fa-f]', 12);
SELECT
CASE
WHEN @Problem LIKE @GuidPattern THEN 1
ELSE 0
END AS [FollowsPattern];
答案是0
,但是當我在我的本地機器上運行完全相同的代碼答案是1
上運行。
它看起來很明顯,該字符串實際上是一個有效的GUID,所以在這兩種情況下的答案應該是1
。所有其他的方法,我知道,以確認GUID是有效的也是成功的,在本地和服務器上:
SELECT
CASE
WHEN CAST(@Problem AS UNIQUEIDENTIFIER) = @Problem THEN 1
ELSE 0
END AS [IsGuid1]; -- 1
SELECT
CASE
WHEN CONVERT(UNIQUEIDENTIFIER, @Problem) = @Problem THEN 1
ELSE 0
END AS [IsGuid2]; -- 1
SELECT
CASE
WHEN TRY_CONVERT(UNIQUEIDENTIFIER, @Problem) IS NOT NULL THEN 1
ELSE 0
END AS [IsGuid3]; -- 1
服務器版本是
Microsoft SQL Server 2016 (RTM) - 13.0.1601.5 (X64)
Apr 29 2016 23:23:58
Copyright (c) Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600:) (Hypervisor)
和我的本地安裝的版本是
Microsoft SQL Server 2014 - 12.0.2000.8 (X64)
Feb 20 2014 20:04:26
Copyright (c) Microsoft Corporation
Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
默認排序規則是不一樣的(SQL_Latin1_General_CP1_CI_AS
本地和Danish_Norwegian_CI_AS
在服務器上),但我不認爲這應該很重要,因爲我正在處理機智h Unicode仍然如此。 在另一臺機器上添加額外的更新:不正確,整理是問題的根源。我只在變量聲明中測試了不同的排序規則,而不是比較本身。COLLATE
子句與其他的排序規則沒有區別。
證明它的簡化版本:HTTP://計算器。com/a/9577359/3270427 – McNets
GUID由我無法控制的集成提供,用於跨多個表關聯行。一切都表明集成確實使用了'NEWID'的等價物,但我在這裏使用了一個字符串常量,因爲我能夠追蹤導致問題的一個特定GUID實例(絕大多數我們沒有收到)。但是,這並不能解釋問題。 – soapygopher
rextester.com返回1 – McNets