2011-12-27 48 views
3

考慮這個片斷:爲什麼我會爲相同的數據類型獲取CONVERT_IMPLICIT?

CREATE TABLE #Temp (Name varchar(100)) 
GO 

DECLARE @Name varchar(100) 
SELECT @Name = '123' 

SELECT * FROM #Temp WHERE Name = @Name 

當檢查它的執行計劃,我得到了@Name變量CONVERT_IMPLICIT電話:

[tempdb].[dbo].[#Temp].[Name]=CONVERT_IMPLICIT(varchar(100),[@Name],0) 

爲什麼發生這種情況,因爲我有相同的數據類型?

+0

你不是從.NET調用這個或者會傳入Unicode字符串的東西(因此導致nvarchar-> varchar轉換)? – 2011-12-27 15:20:41

+0

不,我正在Management Studio上直接運行。但我認爲@MartinSmith得到了一個點 – 2011-12-27 15:23:27

+0

如果你先添加'USE tempdb'會怎麼樣?並檢查服務器與數據庫整理也。這將備份@Martin Smith的示例 – gbn 2011-12-27 15:42:26

回答

4

我在排序比tempdb的排序規則不同的數據庫上下文中運行腳本時看到CONVERT_IMPLICIT

從具有相同排序規則的數據庫運行時,它不會出現在規劃中。

在某些情況下,這可能與錯誤

不能進行

VARCHAR值到VARCHAR的隱式轉換 因爲該值的排序規則是懸而未決失敗的原因歸類 衝突

但我不確定這種隱式轉換無法完成的情況。

+2

對錶變量中使用的排序規則進行了一些更改http://msdn.microsoft.com/en-us/library/ms143179%28SQL.90%29.aspx這與您的要點有點相關這裏 – gbn 2011-12-27 15:41:52

相關問題