我有一个MS SQL 2000数据库从公共服务器备份并在测试位置进行恢复以进行升级测试。问题是,在公共服务器上具有访问权限的用户在测试服务器上不存在,现在所有表都以该用户名作为前缀(这需要对这些表进行所有查询更改!)来自以前所有者的MS SQL数据库表前缀
Is there任何快速解决这个问题的方法?我已经改变了数据库的所有者,但这没有帮助。
我有一个MS SQL 2000数据库从公共服务器备份并在测试位置进行恢复以进行升级测试。问题是,在公共服务器上具有访问权限的用户在测试服务器上不存在,现在所有表都以该用户名作为前缀(这需要对这些表进行所有查询更改!)来自以前所有者的MS SQL数据库表前缀
Is there任何快速解决这个问题的方法?我已经改变了数据库的所有者,但这没有帮助。
好了,找到了答案 - 中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
创建登录和用户,但发现从sysusers中的SID
EXEC sp_addlogin 'TheLogin', 'ThePassword', @sid = ???
EXEC sp_adduser 'TheLogin','TheUser'
注:SQL Server 2000中所以不能使用CREATE LOGIN或CREATE USER
您是否阅读过这个问题:这仍然意味着更改所有具有架构参考 – gbn 2010-02-23 08:10:13
“阅读问题”的查询?他问了! – bart 2010-02-23 09:10:24
@bart:很好的电话。 oops – gbn 2010-02-23 13:03:15