我在SQL Server 2008 Management Studio中發現了以下問題。當我整體運行下面的腳本時,我期望錯誤(由於「複製和粘貼錯誤」),但不會收到它們。SQL臨時表不會拋出無效的列名稱應該發生錯誤
IF OBJECT_ID('Foo') IS NOT NULL
BEGIN
DROP TABLE Foo
END
IF OBJECT_ID('Bar') IS NOT NULL
BEGIN
DROP TABLE Bar
END
CREATE TABLE Foo (
FooID int
)
Create Table Bar (
BarID int
, FooID int
)
INSERT INTO Foo
SELECT 1 UNION ALL SELECT 2
INSERT INTO Bar
SELECT 1,1 UNION ALL SELECT 2,1 UNION ALL SELECT 3,1
GO
IF OBJECT_ID('tempdb..#temp') IS NOT NULL
BEGIN
DROP TABLE #TEMP
END
GO
CREATE TABLE #TEMP (
FooID int
)
INSERT INTO #TEMP
SELECT FooID FROM Bar
GO
SELECT * FROM Foo WHERE FooID IN (SELECT FooID FROM #TEMP)
GO
SELECT * FROM Bar WHERE BarID IN (SELECT BarID FROM #TEMP)
GO
SELECT * FROM #TEMP
GO
含有「選擇BarID FROM #TEMP」 where子句過濾器的倒數第二個語句運行,但在#TEMP沒有BarID列。當作爲一個整體運行腳本時,我不會收到任何錯誤,腳本將返回Foo中的所有行。但是,當我自己運行該命令時,我收到錯誤通知我#TEMP中沒有BarId。
這是有原因嗎?它是我的代碼嗎?
如果您知道BarID不在#TEMP中,您爲什麼要從#TEMP中選擇BarID? – Paparazzi
正如它在我的問題中說的那是我的錯誤 - 問題不在於我的代碼有多有效,但爲什麼錯誤不會拋出....這是由尼爾 – littlechris