How do you check if IDENTITY_INSERT is set to ON or OFF in SQL Server?

前端 未结 8 969
暗喜
暗喜 2020-12-09 00:52

I\'ve searched for this, but threads in which it appeared tended to have answers from people who didn\'t understand the question.

Take the following syntax:

<
8条回答
  •  借酒劲吻你
    2020-12-09 01:19

    If you're attempting to turn off IDENTITY_INSERT for some other table to avoid getting an error when you want to set IDENTITY_INSERT on, the following may also work for you. As other have said on this thread IDENTITY_INSERT is a session setting with no direct visibility. However I made the interesting discovery that SET IDENTITY_INSERT OFF doesn't error out for any table that has an identity whether or not IDENTITY_INSERT is ON for that table. So it occurred to me that I could just call SET IDENTITY_INSERT ... OFF for every table with an identity in the database. It feels a bit like a brute force solution, but I found that the following dynamic SQL block did the trick very nicely.

    ---- make sure IDENTITY_INSERT is OFF ----
    DECLARE @cmd NVARCHAR(MAX)
    SET @cmd = CAST((SELECT 'SET IDENTITY_INSERT ' + 
                 QUOTENAME(OBJECT_SCHEMA_NAME(t.object_id)) + '.' + 
                 QUOTENAME(t.name) + ' OFF' + CHAR(10)
                 FROM sys.columns c 
                 JOIN sys.tables t ON t.object_id = c.object_id
                 WHERE c.is_identity = 1 
                 ORDER BY 1 FOR XML PATH('')) AS NVARCHAR(MAX))
    EXEC sp_executesql @cmd
    

提交回复
热议问题