来自上一个所有者的MS SQL数据库表前缀

时间:2010-02-23 07:55:00

标签: sql-server tsql schema owner

我有一个从公共服务器备份的MS SQL 2000数据库,并在测试位置进行恢复以进行升级测试。问题是测试服务器上不存在公共服务器上具有访问权限的用户,现在所有表都以该用户名为前缀(这需要对这些表进行所有查询以进行更改!)

有没有快速解决方法?我已经更改了数据库所有者,但这没有帮助。

2 个答案:

答案 0 :(得分:1)

创建登录名和用户,但从sysusers

中找出SID
EXEC sp_addlogin 'TheLogin', 'ThePassword', @sid = ???
EXEC sp_adduser 'TheLogin','TheUser'

注意:SQL Server 2000因此无法使用CREATE LOGIN或CREATE USER

答案 1 :(得分:1)

好的,找到了答案 - 必须将OBJECT所有者更改为DBO,否定需要在SQL脚本/查询中为对象添加前缀 - 在这种情况下,对象是数据库表

这是一个脚本,它将更改数据库中对象的所有者(而不是我自己的代码)

DECLARE @currentObject nvarchar(517)
DECLARE @qualifiedObject nvarchar(517)
DECLARE @currentOwner varchar(50)
DECLARE @newOwner varchar(50)

SET @currentOwner = 'old_owner'
SET @newOwner = 'dbo'

DECLARE alterOwnerCursor CURSOR FOR
SELECT [name] FROM dbo.sysobjects 
WHERE xtype = 'U' or xtype = 'P'
AND LEFT([name], 2) <> 'dt'
OPEN alterOwnerCursor
FETCH NEXT FROM alterOwnerCursor INTO @currentObject
WHILE @@FETCH_STATUS = 0
BEGIN
   SET @qualifiedObject = CAST(@currentOwner as varchar) + '.' + CAST(@currentObject as varchar)
   EXEC sp_changeobjectowner @qualifiedObject, @newOwner
   FETCH NEXT FROM alterOwnerCursor INTO @currentObject
END
CLOSE alterOwnerCursor
DEALLOCATE alterOwnerCursor