Sql server 以前所有者的MS SQL数据库表前缀

Sql server 以前所有者的MS SQL数据库表前缀,sql-server,tsql,schema,owner,Sql Server,Tsql,Schema,Owner,我有一个MS SQL 2000数据库,它是从公共服务器备份的,并在测试位置还原以进行升级测试。问题是,在公共服务器上具有访问权限的用户在测试服务器上不存在,现在所有表都以该用户名作为前缀(这要求更改对这些表的所有查询!) 有什么快速的方法可以解决这个问题吗?我已更改了数据库所有者,但这没有帮助。创建登录名和用户,但从sysusers中查找SID EXEC sp_addlogin 'TheLogin', 'ThePassword', @sid = ??? EXEC sp_adduser 'TheL

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


有什么快速的方法可以解决这个问题吗?我已更改了数据库所有者,但这没有帮助。

创建登录名和用户,但从sysusers中查找SID

EXEC sp_addlogin 'TheLogin', 'ThePassword', @sid = ???
EXEC sp_adduser 'TheLogin','TheUser'

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

确定,找到答案-对象所有者必须更改为DBO,不需要在SQL脚本/查询中为对象添加前缀引用-本例中的对象是数据库表

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

DECLARE@currentObject nvarchar(517)
声明@qualifiedObject nvarchar(517)
声明@currentOwner varchar(50)
声明@newOwner varchar(50)
设置@currentOwner='旧所有者'
SET@newOwner='dbo'
声明的alterOwnerCursor游标
从dbo.sysobjects中选择[name]
其中xtype='U'或xtype='P'
左([名称],2)“dt”
开放式交流传感器
从alterOwnerCursor获取下一个到@currentObject
而@@FETCH\u STATUS=0
开始
设置@qualifiedObject=CAST(@currentOwner作为varchar)+'.+CAST(@currentObject作为varchar)
EXEC sp_changeobjectowner@qualifiedObject,@newOwner
从alterOwnerCursor获取下一个到@currentObject
结束
闭合式交流断路器
解除分配替代所有者

您是否阅读了问题:这仍然意味着更改所有具有模式引用的查询“阅读问题”?他问了@gbn:这是一个脚本,用于更改表对象的所有者,这意味着可以再次引用它们而无需前缀,例如,最初,这些表被称为tblWhatever。然后,当移动到测试服务器时,它们被称为olduser.tblWhatever。脚本将所有者更改为DBO,使其现在称为DBO.tblWhatever。可以引用任何带有前缀“dbo”的表,而无需指定“dbo”前缀,即tblWhatever或dbo.tblWhatever,这意味着您无需更改任何查询:)
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