Sql-Server
此查詢計劃中沒有 IMPLICIT_CONVERSION 警告
採用以下最低限度完整且可驗證的範例1程式碼:
USE tempdb; DROP TABLE IF EXISTS dbo.t; GO CREATE TABLE dbo.t ( t_id int NOT NULL CONSTRAINT t_pk PRIMARY KEY CLUSTERED IDENTITY(1,1) , k sysname NOT NULL INDEX t_001 , s sysname NOT NULL INDEX t_002 , somedata varchar(1000) NOT NULL CONSTRAINT t_somedata_df DEFAULT REPLICATE('A', 1000) , INDEX t_003 (k, s) ); INSERT INTO dbo.t (s, k) SELECT sc1.name, sc2.name FROM sys.syscolumns sc1 CROSS JOIN sys.syscolumns sc2; CREATE STATISTICS t_st001 ON dbo.t (k) WITH FULLSCAN; CREATE STATISTICS t_st002 ON dbo.t (s) WITH FULLSCAN;
以下查詢故意使用了錯誤的變數類型。我希望查詢計劃包含一個隱式轉換警告,但它沒有。
DECLARE @k char(128) = 'a'; DECLARE @s char(128) = ''; SELECT s FROM dbo.t LEFT JOIN sys.syscolumns sc ON t.s = sc.name WHERE dbo.t.s = @s OR dbo.t.k = @k;
這是為什麼?
查詢計劃在這裡。
1 - 這是我的網站,順便說一句
您的參數的數據類型優先級低於與之比較的列。在這種情況下,參數值將被隱式轉換。這是一件好事。將列值轉換為參數的類型是有問題的,並且會觸發警告。