sql-server-2005 – 临时表上的DBCC CHECKIDENT为错误的用户抛出权限错误

我以非sa用户“bhk”身份登录sql Server 2005数据库,该用户只是“公共”服务器角色的成员.以下代码尝试在用户’bhk’调用的存储过程中执行.这行代码……
TRUNCATE TABLE #Table1
DBCC CHECKIDENT('#Table1',RESEED,@SequenceNumber) WITH NO_INFOMSGS

导致此错误

User ‘guest’ does not have permission
to run DBCC CHECKIDENT for object
‘#Table1__00000000007F’.

我知道运行DBCC CHECKIDENT所需的权限…
调用者必须拥有该表,或者是sysadmin固定服务器角色,db_owner固定数据库角色或db_ddladmin固定数据库角色的成员.

所以我有两个问题:

>因为’bhk’正在调用存储的
创建临时的过程
表,不应该’bhk’是所有者
并被允许运行DBCC
CHECKIDENT?
>为什么会出错
消息返回该用户’来宾’
没有许可?据我所知,我不是
以“访客”身份登录.

任何帮助将不胜感激.

解决方法

这是一个替代解决方案,如果您需要使用大于1的序列号重新种子,则可能会有效.
TRUNCATE #Table1

SET IDENTITY_INSERT #Table1 ON

INSERT INTO #Table1 (TableID) -- This is your primary key field
VALUES (@SequenceNumber - 1)

SET IDENTITY_INSERT #Table1 OFF

DELETE FROM #Table1

这样做是在临时表上设置IDENTITY_INSERT,以允许您添加具有显式ID的行.然后,您可以删除此行,但是进一步的插入应该从最后一个序列号开始.

相关文章

(一)日志传送架构 (1.1)相关服务器 主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库...
(一)事故背景 最近在SQL Server 2012生产数据库上配置完事物复制(发布订阅)后,生产数据库业务出现了...
(一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既...
(一)背景个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制。在...
UNION和OR谓词 找出 product 和 product2 中售价高于 500 的商品的基本信息. select * from product wh...
datawhale组队学习task03