【问题标题】:Can I use IDENTITY_INSERT in a cursor on SQL Server 2008?我可以在 SQL Server 2008 上的游标中使用 IDENTITY_INSERT 吗?
【发布时间】:2012-11-07 14:50:53
【问题描述】:

我有以下代码:

 declare c cursor for
            select
                id_user_V3
                ,device_type
                ,4
                ,notfication_mode
                ,t1.device_token
                ,registration_date
                ,rank
                ,1
            from audiv2.dbo.mya_webservice_device_token t1
                join migr.asoc_V2_glb_user t2 on t1.user_id = t2.id_user_V2

        open c
        fetch next from c into @id_user_v3,@type,@application_id,@notiffication,@device_tooken,@creation_date,@rang,@status
        while @@FETCH_STATUS=0
            begin

                set @device_id = (ISNULL((SELECT MAX(id_device) FROM usr_device)+1,1))

                SET IDENTITY_INSERT usr_device ON

                insert into usr_device values
                (
                    @device_id
                    ,@id_user_v3
                    ,@type
                    ,@application_id
                    ,@notiffication
                    ,@device_tooken
                    ,@creation_date
                    ,@rang
                    ,@status
                )
                SET IDENTITY_INSERT usr_device OFF

                fetch next from c into @id_user_v3,@type,@application_id,@notiffication,@device_tooken,@creation_date,@rang,@status
            end

        close c
        deallocate c 

我得到的错误是:

只有在使用列列表并且 IDENTITY_INSERT 为 ON 时,才能为表 'usr_device' 中的标识列指定显式值。

我该如何解决这个问题?

提前致谢

【问题讨论】:

  • 通过再次阅读错误消息或搜索此错误消息?插入标识值需要 两个 条件。 “使用了一个列列表并且 IDENTITY_INSERT 为 ON”。好吧,你已经打开了IDENTITY_INSERT...
  • @Damien_The_Unbeliever 我在插入表格之前将 IDENTITY_INSERT usr_device 设置为 ON
  • 但正如错误消息所说,正如我强调的那样,您必须满足 两个 条件。您遇到了其中一个(打开IDENTITY_INSERT)-您必须遇到另一个-使用列列表。
  • 是的,你是对的。谢谢你。将此作为答案发布。

标签: sql-server-2008 cursor identity-column


【解决方案1】:

您需要在 INSERT 子句中明确提及所有列名

插入 usr_device (col1, col2,...) 值

【讨论】:

    猜你喜欢
    • 2011-01-25
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    相关资源
    最近更新 更多