Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 为什么此SQL代码不生成错误?_Sql Server 2008_Tsql - Fatal编程技术网

Sql server 2008 为什么此SQL代码不生成错误?

Sql server 2008 为什么此SQL代码不生成错误?,sql-server-2008,tsql,Sql Server 2008,Tsql,可能重复: 我今天在工作中偶然发现了这一点,我想知道,为什么下面的代码不会生成错误 CREATE TABLE #TableA (ColumnA VARCHAR(25)) CREATE TABLE #TableB (ColumnB VARCHAR(25)) INSERT INTO #TableA (ColumnA) VALUES('1') INSERT INTO #TableA (ColumnA) VALUES('2') INSERT INTO #TableA (ColumnA) VALUES

可能重复:

我今天在工作中偶然发现了这一点,我想知道,为什么下面的代码不会生成错误

CREATE TABLE #TableA (ColumnA VARCHAR(25))
CREATE TABLE #TableB (ColumnB VARCHAR(25))

INSERT INTO #TableA (ColumnA) VALUES('1')
INSERT INTO #TableA (ColumnA) VALUES('2')
INSERT INTO #TableA (ColumnA) VALUES('3')

INSERT INTO #TableB (ColumnB) VALUES('1')

SELECT *
FROM #TableA
WHERE ColumnA IN(SELECT ColumnA FROM #TableB)
输出:

表格B上不存在ColumnA,为什么不生成错误

@@版本告诉我,我正在运行以下程序:

Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (X64)   Jul  9 2008 14:17:44   Copyright (c) 1988-2008 Microsoft Corporation  Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (VM) 
子查询中的ColumnA从表B中选择ColumnA 指TableA的列a,它是选择列表中的有效列

因此没有错误,因为您正在比较TableA.ColumnA和TableA.ColumnA,所以得到了三行

如果要验证上述语句,请将ColumnA替换为除有效列以外的任何列,例如ColumnAB,则会出现错误

如果您尝试以下方法:

CREATE TABLE #TableA (ColumnA VARCHAR(25))
CREATE TABLE #TableB (ColumnB VARCHAR(25))

INSERT INTO #TableA (ColumnA) VALUES('1')
INSERT INTO #TableA (ColumnA) VALUES('2')
INSERT INTO #TableA (ColumnA) VALUES('3')

INSERT INTO #TableB (ColumnB) VALUES('1')

SELECT *
FROM #TableA
WHERE ColumnA IN(SELECT ColumnAB FROM #TableB)
输出将是

Msg 207,16级,状态1,第14行 列名称“ColumnAB”无效


使用别名SELECT*FROM table A其中A.ColumnA插入从table B中选择B.ColumnA并检查错误准备回答,请参见此处:非常好。另一种解释方法是,从表A中选择*显然没有错误,其中从表B中选择42中的列A。在子查询的上下文中,ColumnA(如42)被定义,如果不是所有问题的答案的话。我觉得自己很笨!你是100%正确的,我已经做过很多次了,只是我习惯于在内部查询的WHERE子句中使用外部查询中的列。例如:从表t中选择*其中t.Id插入从表tIn中选择MAXtIn.Id,其中tIn.Column=t.Column出于某种奇怪的原因,我对此有不同的看法。
CREATE TABLE #TableA (ColumnA VARCHAR(25))
CREATE TABLE #TableB (ColumnB VARCHAR(25))

INSERT INTO #TableA (ColumnA) VALUES('1')
INSERT INTO #TableA (ColumnA) VALUES('2')
INSERT INTO #TableA (ColumnA) VALUES('3')

INSERT INTO #TableB (ColumnB) VALUES('1')

SELECT *
FROM #TableA
WHERE ColumnA IN(SELECT ColumnAB FROM #TableB)