本文介紹了SQL Server 2016更改對(duì)象所有者的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我繼承了一個(gè)SQL 2008 dBASE,它的所有對(duì)象都以開發(fā)人員作為所有者的名稱作為前綴,即ownername.sp_get_all_USERS。
我已將dBASE還原到SQL Server 2016 Express Edition。
有數(shù)百個(gè)dBASE對(duì)象,有沒有辦法自動(dòng)將對(duì)象所有者更改為dbo,而不是手動(dòng)編輯每個(gè)對(duì)象?
我嘗試過以下操作,但自SQL Server 2005以來,您顯然不能再對(duì)對(duì)象進(jìn)行即席更改?
SELECT * from sysobjects where uid = user_id('UseNAme')
declare @Return int
exec @Return = sp_configure 'allow updates', '1'
SELECT @Return as 'Returned Code'
GO
reconfigure WITH OVERRIDE
GO
DECLARE @Rows int, @Error int
BEGIN TRANSACTION
update sysobjects set uid = user_id('dbo') where uid = user_id('UseNAme')
SELECT @Error = @@Error, @Rows = @@RowCount
SELECT @Rows as '#Rows'
IF @Rows > 0
BEGIN
SELECT @Rows AS '#Rows'
COMMIT TRANSACTION
END
else
BEGIN
SELECT @Error AS 'Error #'
ROLLBACK TRANSACTION
END
exec sp_configure 'allow updates', '0'
reconfigure WITH OVERRIDE
go
最感謝的任何幫助。
推薦答案
您必須使用更改架構(gòu)…
ALTER SCHEMA oldschemaname TRANSFER dbo.Address;
自動(dòng)使用下面的
這會(huì)將具有非SYSTEM架構(gòu)的所有表更改為dbo,請(qǐng)注意,如果您有兩個(gè)不同架構(gòu)的表,則它們不能存在于同一架構(gòu)中
select *,row_number() over (order by (select null)) as rownum
into #tables
from information_Schema.tables
where table_schema in (select name from sys.schemas
where name not in ('dbo','guest','INFORMATION_SCHEMA','sys') and principal_id <16384
)
now move
declare @min int,@max int
select @min=min(rownum),@max=max(rownum)
from #tables
declare @tblname varchar(255),@schemaname sysname
declare @sql varchar(max)
while @min<=@max
Begin
select @tblname=table_name,@schemaname=table_schema from
#tables where rownum=@min
set @sql='alter schema dbo transfer '+ @schemaname+'.'+@tblname
--print @sql
exec(@sql)
Set @min=@min+1
End
sp_根據(jù)文檔說明更改對(duì)象所有者..
此存儲(chǔ)過程僅適用于MicrosoftSQL Server2000中可用的對(duì)象。此功能將在Microsoft SQL Server的未來版本中刪除。避免在新的開發(fā)工作中使用此功能,并計(jì)劃修改當(dāng)前使用此功能的應(yīng)用程序。請(qǐng)改用ALTER SCHEMA或ALTER AUTHORIZATION。Sp_changeobjecowner同時(shí)更改架構(gòu)和所有者。為了保持與早期版本的SQL Server的兼容性,僅當(dāng)當(dāng)前所有者和新所有者都擁有與其數(shù)據(jù)庫用戶名同名的架構(gòu)時(shí),此存儲(chǔ)過程才會(huì)更改對(duì)象所有者。
這篇關(guān)于SQL Server 2016更改對(duì)象所有者的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,