当前位置 - 股票行情交易網 - 裝修設計 - SQL數據庫時提示對象名'XXX' 無效

SQL數據庫時提示對象名'XXX' 無效

原因壹:新建的數據庫,沒有將初始數據導入到新庫裏。

解決方法:

請登錄到我司數據庫控制面板->備份還原系統,然後使用數據庫還原的功能,在那裏直接將您的數據庫備份上傳還原,如果操作過程沒有出現錯誤,壹般您的數據庫就已經還原了,此方法適合還原壹些初始數據不是很大的數據庫(30M以內),如果您的數據庫初始數據很大,在線上傳還原的成功率比較低,這時請使用數據庫導入導出的方法進行還原,詳細的導入導出方法請查看我司的另壹篇幫助文檔?數據庫導入導出方法詳解

原因二:數據庫做過遷移,新數據庫的對象所有者名稱不同造成

數據庫做了遷移後,壹般會進行導入/還原數據的過程,在這個過程中,要註意新數據庫的完整對象名與原來是壹致的。

比如,您的舊數據庫名叫 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

end

close? @CrsrVar

deallocate? @CrsrVar

2. 可能您的編寫網站程序的時候沒有註意通用性,在查詢數據時采用了類似?select * from dbuser1.table1?這樣的SQL語句,壹般來說,這不是壹個好的習慣,在這種情況下,如果數據庫遷移過的話,經常會導致對象名無效的錯誤,為了避免這種不必要的問題,建議您在程序中查詢數據時,直接用?select * from table1?這樣的方式,就是在程序中不在用對象的完整名稱,而是單使用表名或視圖名,這樣就可以避免不必要的“對象名無效”的問題。