Sql server 显示类型转换警告的执行计划-在Cond列上
正在表达式中获取类型转换。。。。。可能会影响查询范围选择中的“CardinalityEstimate”。 表T1和T2都具有聚集索引 如何克服警告Sql server 显示类型转换警告的执行计划-在Cond列上,sql-server,Sql Server,正在表达式中获取类型转换。。。。。可能会影响查询范围选择中的“CardinalityEstimate”。 表T1和T2都具有聚集索引 如何克服警告 CREATE TABLE T1 ( KEY INT IDENTITY(1,1) NOT NULL, CODE VARCHAR(50), DESCRIPTION VARCHAR(100), EXTERNAL_KEY VARCHAR(15), FLAG BIT ) INSERT INTO T1 VALUES(
CREATE TABLE T1
(
KEY INT IDENTITY(1,1) NOT NULL,
CODE VARCHAR(50),
DESCRIPTION VARCHAR(100),
EXTERNAL_KEY VARCHAR(15),
FLAG BIT
)
INSERT INTO T1 VALUES(1,'ASS','DESC','NULL',0)
INSERT INTO T1 VALUES(1,'ASS1','DESC','45213',1)
INSERT INTO T1 VALUES(1,'ASS2','DESC','NULL',1)
INSERT INTO T1 VALUES(1,'ASS3','DESC','NULL',0)
INSERT INTO T1 VALUES(1,'ASS4','DESC','56321',1)
CREATE TABLE T2
(
KEY INT IDENTITY(1,1) NOT NULL,
CODE VARCHAR(50),
DESCRIPTION VARCHAR(100),
EXTERNAL_KEY NUMERIC(14,0)
)
INSERT INTO T2 VALUES(1,'DSA','DESC',51256)
INSERT INTO T2 VALUES(1,'DSA1','DESC',45213)
INSERT INTO T2 VALUES(1,'DSA2','DESC',51256)
INSERT INTO T2 VALUES(1,'DSA3','DESC',56321)
实际查询:
SELECT T1.KEY,T1.FLAG,T2.KEY, FROM T2 INNER JOIN T1 ON
CAST(NULLIF(RTRIM(T1.EXTERNAL_KEY),'') AS NUMERIC(14,0)) = T2.EXTERNAL_KEY
WHERE T1.EXTERNAL_KEY IS NOT NULL
示例数据和查询都存在一些问题
KEY INT IDENTITY(1,1)NOT NULL
应更改为[KEY]NOT NULL
或不插入标识列插入T1值('ASS'、'DESC'、'NULL',0)
当您用单引号括住'NULL'时,您也不插入DB NULL,而是插入文本NULL。为了这个。下面的代码应该可以工作
但是,我认为您希望NULL为NULL而不是文本,因此请将插入内容从插入T1(代码、描述、外部密钥、标志)值('ASS','DESC','NULL',0)更改为插入T1(代码、描述、外部密钥、标志)值('ASS','DESC',NULL,0)
样本数据 密码
SELECT T1.[KEY],T1.FLAG,T2.[KEY]
FROM T2
INNER JOIN T1
ON NULLIF(T1.EXTERNAL_KEY ,'NULL')=T2.EXTERNAL_KEY
WHERE T1.EXTERNAL_KEY IS NOT NULL
IF OBJECT_ID('tempdb..#T1') IS NOT NULL
DROP TABLE #T1
IF OBJECT_ID('tempdb..#T2') IS NOT NULL
DROP TABLE #T2
CREATE TABLE #T1
(
[KEY] INT IDENTITY(1,1) NOT NULL,
CODE VARCHAR(50),
DESCRIPTION VARCHAR(100),
EXTERNAL_KEY VARCHAR(15),
FLAG BIT
)
GO
INSERT INTO #T1(CODE,DESCRIPTION,EXTERNAL_KEY,FLAG) VALUES('ASS','DESC',NULL,0)
INSERT INTO #T1(CODE,DESCRIPTION,EXTERNAL_KEY,FLAG) VALUES('ASS1','DESC','45213',1)
INSERT INTO #T1(CODE,DESCRIPTION,EXTERNAL_KEY,FLAG)VALUES('ASS2','DESC',NULL,1)
INSERT INTO #T1(CODE,DESCRIPTION,EXTERNAL_KEY,FLAG)VALUES('ASS3','DESC',NULL,0)
INSERT INTO #T1(CODE,DESCRIPTION,EXTERNAL_KEY,FLAG)VALUES('ASS4','DESC','56321',1)
CREATE TABLE #T2
(
[KEY] INT IDENTITY(1,1) NOT NULL,
CODE VARCHAR(50),
DESCRIPTION VARCHAR(100),
EXTERNAL_KEY NUMERIC(14,0)
)
GO
INSERT INTO #T2 (CODE,DESCRIPTION,EXTERNAL_KEY) VALUES('DSA','DESC',51256)
INSERT INTO #T2 (CODE,DESCRIPTION,EXTERNAL_KEY)VALUES('DSA1','DESC',45213)
INSERT INTO #T2 (CODE,DESCRIPTION,EXTERNAL_KEY)VALUES('DSA2','DESC',51256)
INSERT INTO #T2 (CODE,DESCRIPTION,EXTERNAL_KEY)VALUES('DSA3','DESC',56321)
SELECT #T1.[KEY],#T1.FLAG,#T2.[KEY]
FROM #T2
INNER JOIN #T1
ON NULLIF(#T1.EXTERNAL_KEY ,NULL)=#T2.EXTERNAL_KEY
WHERE #T1.EXTERNAL_KEY IS NOT NULL