[英]Deletion\Creation of Temp tables in SQL Server 2008
我有這樣的SQL代碼
IF Object_id('tempdb..#empDate) IS NOT NULL
DROP TABLE #empDate
CREATE TABLE #empDate
(
[empID] INT,
[AddLoc] VARCHAR(1000)
)
在上面的代碼之后會有更多的SQL行,然后重復它。
我收到以下錯誤。
Msg 2714,Level 16,State 1,Line 589
數據庫中已經有一個名為“#empDate”的對象。
我換了
IF Object_id('tempdb..#empDate) IS NOT NULL
同
IF Object_id('tempdb..#empDate%) IS NOT NULL
正如在SQL論壇上寫的那樣,SQL Server將數字附加到后續的臨時表中。
來源: 檢查臨時表是否存在,如果存在,則在創建臨時表之前刪除
我在Windows 7企業版上使用Microsoft SQL Server 2008。
我無法理解錯誤的原因。
請幫忙。
樣本一
這將失敗......再次執行相同的代碼,將拋出你現在得到的錯誤
IF Object_id('tempdb..#empDate') IS NOT NULL
BEGIN
DROP TABLE #empDate
END
CREATE TABLE #empDate
(
[empID] INT,
[AddLoc] VARCHAR(1000)
)
IF Object_id('tempdb..#empDate') IS NOT NULL
BEGIN
DROP TABLE #empDate
END
CREATE TABLE #empDate
(
[empID] INT,
[AddLoc] VARCHAR(1000)
)
樣本二(固定)
IF Object_id('tempdb..#empDate') IS NOT NULL
BEGIN
DROP TABLE #empDate
END
CREATE TABLE #empDate
(
[empID] INT,
[AddLoc] VARCHAR(1000)
)
GO --<-- Adding this Batch Separator will eliminate the Error
IF Object_id('tempdb..#empDate') IS NOT NULL
BEGIN
DROP TABLE #empDate
END
CREATE TABLE #empDate
(
[empID] INT,
[AddLoc] VARCHAR(1000)
)
測試
如果您嘗試在一個BATCH中執行以下語句,即使沒有任何名稱為#empDate
表,它們也會失敗,它甚至不會執行第一個Create表語句。 並會拋出錯誤。
CREATE TABLE #empDate
(
[empID] INT,
[AddLoc] VARCHAR(1000)
)
DROP TABLE #empDate
CREATE TABLE #empDate
(
[empID] INT,
[AddLoc] VARCHAR(1000)
)
但是如果你在不同批次中分離所有語句,它們將成功地執行這樣的事情。
CREATE TABLE #empDate
(
[empID] INT,
[AddLoc] VARCHAR(1000)
)
GO
DROP TABLE #empDate
GO
CREATE TABLE #empDate
(
[empID] INT,
[AddLoc] VARCHAR(1000)
)
GO
我會放棄你的桌子而不進行任何預先檢查。
然后編寫/運行腳本清理。
使用臨時表完成后,將其放在腳本的末尾。
所以無條件地運行
DROP TABLE #empDate
然后編寫/運行您的腳本,並確保在腳本的末尾有這一行。
使用object_id傳遞數據庫名稱
例如:
DECLARE @db_id int;
DECLARE @object_id int;
SET @db_id = DB_ID(N'AdventureWorks2012');
SET @object_id = OBJECT_ID(N'AdventureWorks2012.Person.Address');
IF @db_id IS NULL
BEGIN;
PRINT N'Invalid database';
END;
ELSE IF @object_id IS NULL
BEGIN;
PRINT N'Invalid object';
END;
ELSE
BEGIN;
SELECT * FROM sys.dm_db_index_operational_stats(@db_id, @object_id, NULL, NULL);
END;
GO
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.