2015-11-17 58 views
0

我想創建一個表,動態拉動從另一個表中的變量的基礎上的起始IDENTITY ID。 SQL執行成功,但之後,我無法找到我的臨時表。該DBCC CHECKIDENT帶回以#開頭的臨時表和SQL Server不同的對待他們Invalid object name '#address_temp'.動態SQL表創建 - 執行後的無效對象?

IF OBJECT_ID('tempdb.dbo.#address_temp', 'U') IS NOT NULL 
    DROP TABLE #address_temp 

DECLARE @address_temp_ID VARCHAR(MAX) 

SET @address_temp_ID = (SELECT MAX(ID) FROM [PRIMARYDB].[dbo].[ADDRESS]) 

DECLARE @SQLBULK VARCHAR(MAX) 
SET @SQLBULK = 'CREATE TABLE #address_temp(
    [ID] [int] IDENTITY(' + @address_temp_ID + ',1) NOT NULL, 
    [NAME] [varchar](128) NOT NULL, 
    [ADDRESS1] [varchar](128) NOT NULL, 
    [ADDRESS2] [varchar](128) NULL, 
    [CITY] [varchar](128) NULL, 
    [STATE_ID] [smallint] NULL, 
    [ZIP] [varchar](10) NOT NULL, 
    [COUNTY] [varchar](50) NULL, 
    [COUNTRY] [varchar](50) NULL 
CREATE CLUSTERED INDEX pk_add ON #address_temp ([NAME])' 

EXEC (@SQLBULK) 

DBCC CHECKIDENT('#address_temp') 
+0

退出發送到'EXEC'語句的批處理時,本地臨時表會自動丟棄。如果要使用該表,則使用該表的所有代碼必須位於字符串「@ SQLBULK」中並同時執行。 –

回答

2

表名。首先,它們僅適用於創建它們的會話(這不完全正確,因爲它們可以在臨時名稱空間中找到它們,但它們具有唯一的系統生成名稱)

無論如何它們不會堅持不懈,所以你不需要放棄它們(這會發生自動奇蹟般的),並且在會話結束後你肯定不會看到它們......它們已經消失了。

不要使用臨時表,取出名稱中的#號。事情會突然開始起作用。