問題一:使用sqlserver資料庫時,產生sql物件名無效的問題一般是以下兩種常見原因,下面根據不同的原因給出解決方法。
原因一:新建的資料庫,沒有將初始資料匯入到新庫里。
原因二:資料庫做過遷移,新資料庫的物件所有者名稱不同造成
資料庫做了遷移後,一般會進行匯入/還原資料的過程,在這個過程中,要注意新資料庫的完整物件名與原來是一致的。
比如,您的舊資料庫名叫 db1 , 舊資料庫使用者是 dbuser1, 現在要遷移到新的資料庫上,新資料庫名是 db2, 新資料庫使用者是 dbuser2。
sqlserver物件的完整物件名是 資料庫名.使用者名稱.表名 這樣的,假設你的舊資料庫上有個表名叫 table1,那它的完整物件名就是 db1.dbuser1.table1,
當你用新的資料庫名登入匯入舊資料時,新的表名可能變成了 db2.dbuser2.table1,這樣的話,您的程式查詢資料時可能會出現物件名無效的錯誤。
解決方法:要解決這個問題,一般需要做兩步操作:
1. 請分別使用 sp_changeobjectowner '這裡改為資料庫完整物件名','dbo' 這個命令將所有的使用者表,使用者檢視,使用者儲存過程等的所有者全部改為系統內建的特殊使用者dbo
以下是乙個可以簡化執行上面操作的儲存過程,以下儲存過程執行後可能還會有部分的物件改不到所有者,這時請手動執行上面的命令將未能改所有者的物件重新嘗試一下。
declare @crsrvar cursor
declare @pname varchar(40) --物件名
declare @oldowner varchar(40) --原物件所有者
declare @objfullname varchar(80) --原物件全名
set @oldowner = '這裡改為資料表/檢視/儲存過程等的舊所有者名稱'
set @crsrvar = cursor for select name from sysobjects where xtype='u' --xtype=u 表示使用者表
open @crsrvar
fetch next from @crsrvar into @pname
while(@@fetch_status=0)
begin
set @objfullname = @oldowner + '.' + @pname
exec sp_changeobjectowner @objname=@objfullname,@newowner='dbo' --dbo為所有者名
fetch next from @crsrvar into @pname
endclose @crsrvar
deallocate @crsrvar
2. 可能您的編寫**程式的時候沒有注意通用性,在查詢資料時採用了類似 select * from dbuser1.table1 這樣的sql語句,一般來說,這不是乙個好的習慣,在這種情況下,如果資料庫遷移過的話,經常會導致物件名無效的錯誤,為了避免這種不必要的問題,建議您在程式中查詢資料時,直接用 select * from table1這樣的方式,就是在程式中不在用物件的完整名稱,而是單使用表名或檢視名,這樣就可以避免不必要的「物件名無效」的問題。
問題二:在資料庫控制面板操作還原時出現以下錯誤提示原因:
出現此錯誤提示,一般是使用的舊資料庫和當前新的資料庫版本不同導致的,如原來的資料庫用的是sql2008,但現在新資料庫卻是sql2005,或是mysql,這樣的情況都會導致還原操作時出現以上的錯誤提示!
SQL物件名無效的解決
產生sql物件名無效的問題大多原因是由於資料遷移導致的,下面我們給出解決方法.在使用資料庫的過程中,經常會遇到資料庫遷移或者資料遷移的問題,或者有突然的資料庫損壞,這時需要從資料庫的備份中直接恢復。但是,此時會出現問題,這裡說明幾種常見問題的解決方法。一 孤立使用者的問題 比如,以前的資料庫的很多表...
SQL物件名無效的解決
sql物件名無效的解決方法 產生sql物件名無效的問題大多原因是由於資料遷移導致的,下面我們給出解決方法.在使用資料庫的過程中,經常會遇到資料庫遷移或者資料遷移的問題,或者有突然的資料庫損壞,這時需要從資料庫的備份中直接恢復。但是,此時會出現問題,這裡說明幾種常見問題的解決方法。一 孤立使用者的問題...
SQL物件名無效的解決
sql物件名無效的解決方法 產生sql物件名無效的問題大多原因是由於資料遷移導致的,下面我們給出解決方法.在使用資料庫的過程中,經常會遇到資料庫遷移或者資料遷移的問題,或者有突然的資料庫損壞,這時需要從資料庫的備份中直接恢復。但是,此時會出現問題,這裡說明幾種常見問題的解決方法。一 孤立使用者的問題...