我正在尝试创建一个表,该表根据另一个表中的变量动态提取起始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')
答案 0 :(得分:2)
以#开头的表名是临时表,SQL Server以不同方式处理它们。首先,它们仅适用于创建它们的会话(这不是真的,因为它们可以在临时名称空间中找到它们,但它们具有唯一的系统生成名称)
在任何情况下,他们都不会坚持下去,所以你不需要放弃它们(这种情况会自动发生)并且在你的会话结束后你肯定无法看到它们....他们走了。
不要使用临时表,取出名称中的#。事情会突然开始起作用。