SQL Server 存储过程遇到“表 'TT' 没有标识属性。无法执行 SET 操作”异常

SQL Server 存储过程遇到“表 '#TT' 没有标识属性。无法执行 SET 操作”错误

创建临时表,往临时表插入数据的时候报的错误。

SQL Server 存储过程遇到“表 'TT' 没有标识属性。无法执行 SET 操作”异常

一开始提示没有打开主键,后来打开主键就提示上述错误异常。

从网上查找资料没有找到,然后又到群里问各位大牛,一位大牛告诉我是没有设置主键。

我又仔细看看提示,恍然大悟,我就给临时设置了主键。

没有主键之前的代码:

CREATE TABLE #TT(
    CourseId INT ,
    UserId INT,
    ClassId INT
)
INSERT
INTO
    #TT
( CourseId, UserId, ClassId )
SELECT                         
    CourseId,
    UserId ,
    ClassId
FROM dbo.T_MyOrder

执行的话就会报“表 '#TT' 没有标识属性。无法执行 SET 操作”错误

修改之后代码:

CREATE TABLE #TT(
    CourseId INT PRIMARY KEY ,
    UserId INT,
    ClassId INT
)
INSERT
INTO
    #TT
( CourseId, UserId, ClassId )
SELECT                         
    CourseId,
    UserId ,
    ClassId
FROM dbo.T_MyOrder

不报错了。

然后我又把PRIMARY KEY这个关键字去掉了,SqlServer又不报错了。我现在也不知道咋回事了!

茫然中…………希望有人能给我个建议

 

1楼剑走江湖
建议在存储过程中使用临时表之前先判断所创建的临时表是否存在,存在则删除,格式如:IF OBJECT_ID(N#39;tempdb.dbo.#TT#39;, #39;U#39;) IS NOT NULLBEGINDROP TABLE tempdb.dbo.#TT;END
Re: 大稳#183;杨
@剑走江湖,我刚才在SqlServer里面测试了一下,CREATE TABLE #tt(id int),执行了上述代码,开启了两个会话框,没有影响,都能执行不报错。,在存储过程内部的话不用判断的,因为它是局部的,会话关闭后就删除了这个临时表,临时表只在这个会话内有效,所以不需要判断。我们公司大牛告诉我的。