create table t(id int identity(1,1),A1 INT) insert t select 2--ok insert t select 1,2--err /*仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 't' 中为标识列指定显式值。*/
你定义的表的结构应该与存储过程p_getuserinfos返回的结果集的结构相同:select * into #temp form [Managers] where 1=0SET IDENTITY_INSERT #temp ON --由于有自动增长的列insert #temp exec p_getuserinfosSET IDENTITY_INSERT #temp Off -- select * from #tempdrop table #temp 就不会出现上面个错误了
SET IDENTITY_INSERT #temp ON 原来就这么简单啊,给分了
强人继续进来吧 select top 0 * into #temp from Managers SET IDENTITY_INSERT #temp ON insert #temp exec sp_cursoropen @P1 output,@StrSql,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output 执行是返回如下的错误: 服务器: 消息 8106,级别 16,状态 1,行 4 表 '#temp' 没有标识属性。无法执行 SET 操作。 那么应当如何判断一个表是否包含有标识属性的字段呢,如果#temp包含了标识属性的字段而没加SET IDENTITY_INSERT #temp ON在执行下条插入语句时肯定又返回错误啊!
alter proc p_getuserinfos
as
select * from managersgoselect top 0 * into #temp from managers insert #temp exec p_getuserinfosselect * from #tempdrop table #temp返回的错误:
服务器: 消息 213,级别 16,状态 7,过程 p_getuserinfos,行 3
插入错误: 列名或所提供值的数目与表定义不匹配。这是表定义:
alter TABLE [Managers]
(
[ManagerID] [int] IDENTITY (1, 1) NOT NULL ,
[ManagerAccounts] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[ManagerName] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[Description] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[PassWord] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
PRIMARY KEY CLUSTERED
(
[ManagerID]
) ON [PRIMARY]
) ON [PRIMARY]
GO
错误的原因应该是:[ManagerID] [int] IDENTITY (1, 1) NOT ,ManagerID为自增长的
(
字段定义.....
)insert #temp exec p_getuserinfosselect * from #tempdrop table #temp
服务器: 消息 213,级别 16,状态 7,过程 p_getuserinfos,行 3
插入错误: 列名或所提供值的数目与表定义不匹配。
--------->此错误并不是你说的:[ManagerID] [int] IDENTITY (1, 1) NOT ,ManagerID为自增长的,
而是列数量及类型对应不上,估计是你存储过程p_getuserinfos返加的结果集多了一个字段(ManagerID),因为此字段是自增长的,插入时不需要对应字段.
insert t select 2--ok
insert t select 1,2--err
/*仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 't' 中为标识列指定显式值。*/
select * from #tempdrop table #temp
就不会出现上面个错误了
select top 0 * into #temp from Managers
SET IDENTITY_INSERT #temp ON
insert #temp exec sp_cursoropen @P1 output,@StrSql,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output 执行是返回如下的错误:
服务器: 消息 8106,级别 16,状态 1,行 4
表 '#temp' 没有标识属性。无法执行 SET 操作。
那么应当如何判断一个表是否包含有标识属性的字段呢,如果#temp包含了标识属性的字段而没加SET IDENTITY_INSERT #temp ON在执行下条插入语句时肯定又返回错误啊!