动态SQL表创建 - 执行后无效对象?

时间:2015-11-17 18:18:36

标签: sql sql-server tsql

我正在尝试创建一个表,该表根据另一个表中的变量动态提取起始IDENTITY ID。 SQL执行成功但之后,我无法找到我的临时表。 DBCC CHECKIDENT带回Invalid object name '#address_temp'.

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')

1 个答案:

答案 0 :(得分:2)

以#开头的表名是临时表,SQL Server以不同方式处理它们。首先,它们仅适用于创建它们的会话(这不是真的,因为它们可以在临时名称空间中找到它们,但它们具有唯一的系统生成名称)

在任何情况下,他们都不会坚持下去,所以你不需要放弃它们(这种情况会自动发生)并且在你的会话结束后你肯定无法看到它们....他们走了。

不要使用临时表,取出名称中的#。事情会突然开始起作用。