可能重复:
IN子句中不存在列,但SQL运行
我今天在工作时偶然发现了这一点,我想知道,为什么以下代码不生成和错误?
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)
Run Code Online (Sandbox Code Playgroud)
输出:
ColumnA
1
2
3
Run Code Online (Sandbox Code Playgroud)
#TableB上不存在ColumnA,怎么没有生成错误?
@@ VERSION告诉我我正在运行:
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)
Run Code Online (Sandbox Code Playgroud)
Cha*_*ndu 10
ColumnA在子查询中(SELECT ColumnA FROM #TableB)
引用ColumnA#TableA,它是SELECT列表中的有效列.
因此,没有错误,因为您将#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)
Run Code Online (Sandbox Code Playgroud)
输出将是
消息207,级别16,状态1,行14
无效的列名称"ColumnAB".
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |