当前位置:  开发笔记 > 数据库 > 正文

DBCC CHECKIDENT在临时表上为错误的用户抛出权限错误

如何解决《DBCCCHECKIDENT在临时表上为错误的用户抛出权限错误》经验,为你挑选了1个好方法。

我以非sa用户"bhk"身份登录到SQL Server 2005数据库,该用户只是"公共"服务器角色的成员.以下代码尝试在用户'bhk'调用的存储过程中执行.这行代码......

TRUNCATE TABLE #Table1
DBCC CHECKIDENT('#Table1', RESEED, @SequenceNumber) WITH NO_INFOMSGS

导致此错误...

用户'guest'无权为对象
'#Table1__00000000007F' 运行DBCC CHECKIDENT .

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

所以我有两个问题:

    由于'bhk'正在调用创建临时表的存储过程,所以不应该'bhk'是所有者并且允许运行DBCC CHECKIDENT吗?

    为什么错误消息返回用户'guest'没有权限?据我所知,我没有以'客人'身份登录.

任何帮助将不胜感激.



1> Tim C..:

这是一个替代解决方案,如果您需要使用大于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的行.然后,您可以删除此行,但进一步插入应从最后一个序列号开始.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有