我有一个从公共服务器备份的MS SQL 2000数据库,并在测试位置进行恢复以进行升级测试。问题是测试服务器上不存在公共服务器上具有访问权限的用户,现在所有表都以该用户名为前缀(这需要对这些表进行所有查询以进行更改!)
有没有快速解决方法?我已经更改了数据库所有者,但这没有帮助。
答案 0 :(得分:1)
创建登录名和用户,但从sysusers
中找出SIDEXEC 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