SQL新建查詢時,表名沒錯,為什么說對象名無效
1.以sql2012為例,我們在sql查詢時,有時會遇到這種情況:查詢失敗,提示“對象名 xxx 無效”。
2.原因是例子中的examTest只是表名,沒有指定數據庫名,加上數據庫名和所有者名就可以了。
3.如果只加數據庫名是不行的,因為數據庫里的表是按角色管理的,不是所有角色都可以查詢某個表,所以必須只能所有者。
4.如果不在sql中指明數據庫名和所有者名,也是可以的。這時就需要在工具上設置數據庫。
5.把當前數據庫設置為 test之后,再查詢就同樣不會出問題了。
如何解決“SQL對象名無效”的問題
java中連接數據庫,數據庫連接字符串不是可以指定數據庫名么,指定了應該就沒問題了。
String Driver="com.microsoft.sqlrver.jdbc.SQLServerDriver"; //連接SQL數據庫的方法
String URL="jdbc:microsoft:sqlrver://localhost:1433;DatabaName=db_name"; //db_name為數據庫名
String Urname="urname"; //用戶
String Password="password"; //密碼
Class.forName(Driver).new Instance(); //加載數據可驅動
Connection con=DriverManager.getConnection(URL,UrName,Password);
擴展資料:
SQL具有數據定義、數據操縱和數據控制的功能。
1、SQL數據定義功能:能夠定義數據庫的三級模式結構,即外模式、全局模式和內模式結構。在SQL中,外模式又叫做視圖(View),全局模式簡稱模式( Schema),內模式由系統根據數據庫模式自動實現,一般無需用戶過問。
2、SQL數據操縱功能:包括對基本表和視圖的數據插入、刪除和修改,特別是具有很強的數據查詢功能。
3、SQL的數據控制功能:主要是對用戶的訪問權限加以控制,以保證系統的安全性。
參考資料來源:百度百科-結構化查詢語言
SAP登錄時對象名無效
SQL數據庫時提示對象名'XXX' 無效,什么原因?
原因一:新建的數據庫,沒有將初始數據導入到新庫里。
解決方法:
請登錄到我司數據庫控制面板->備份還原系統,然后使用數據庫還原的功能,在那里直接將您的數據庫備份上傳還原,如果操作過程沒有出現錯誤,一般您的數據庫就已經還原了,此方法適合還原一些初始數據不是很大的數據庫(30M以內),如果您的數據庫初始數據很大,在線上傳還原的成功率比較低,這時請使用數據庫導入導出的方法進行還原,詳細的導入導出方法請查看我司的另一篇幫助文檔數據庫導入導出方法詳解
原因二:數據庫做過遷移,新數據庫的對象所有者名稱不同造成
數據庫做了遷移后,一般會進行導入/還原數據的過程,在這個過程中,要注意新數據庫的完整對象名與原來是一致的。
比如,您的舊數據庫名叫 db1 , 舊數據庫用戶是 dbur1, 現在要遷移到新的數據庫上,新數據庫名是 db2, 新數據庫用戶是 dbur2。
sqlrver對象的完整對象名是數據庫名.用戶名.表名這樣的,假設你的舊數據庫上有個表名叫 table1,那它的完整對象名就是 db1.dbur1.table1,
當你用新的數據庫名登錄導入舊數據時,新的表名可能變成了 db2.dbur2.table1,這樣的話,您的程序查詢數據時可能會出現對象名無效的錯誤。
解決方法:要解決這個問題,一般需要做兩步操作:
1. 請分別使用sp_changeobjectowner '這里改為數據庫完整對象名','dbo' 這個命令將所有的用戶表,用戶視圖,用戶存儲過程等的所有者全部改為系統內建的特殊用戶dbo
以下是一個可以簡化執行上面操作的存儲過程,以下存儲過程運行后可能還會有部分的對象改不到所有者,這時請手動執行上面的命令將未能改所有者的對象重新嘗試一下。
declare @CrsrVar cursor
declare @pname varchar(40) --對象名
declare @oldowner varchar(40) --原對象所有者
declare @objfullname varchar(80) --原對象全名
t @oldowner = '這里改為數據表/視圖/存儲過程等的舊所有者名稱'
t @CrsrVar = Cursor For lect name from sysobjects where xtype='U' --xtype=U 表示用戶表
open @CrsrVar
fetch next from @CrsrVar into @pname
while(@@fetch_status=0)
begin
t @objfullname = @oldowner + '.' + @pname
exec sp_changeobjectowner @objname=@objfullname,@newowner='dbo' --dbo為所有者名
fetch next from @CrsrVar into @pname
end
clo @CrsrVar
deallocate @CrsrVar
2. 可能您的編寫網站程序的時候沒有注意通用性,在查詢數據時采用了類似lect * from dbur1.table1這樣的SQL語句,一般來說,這不是一個好的習慣,在這種情況下,如果數據庫遷移過的話,經常會導致對象名無效的錯誤,為了避免這種不必要的問題,建議您在程序中查詢數據時,直接用lect * from table1這樣的方式,就是在程序中不在用對象的完整名稱,而是單使用表名或視圖名,這樣就可以避免不必要的“對象名無效”的問題。
如何解決“SQL對象名無效”的問題
用SQL創建視圖時出現對象名無效錯誤,怎么解決
本文發布于:2023-02-28 18:55:00,感謝您對本站的認可!
本文鏈接:http://m.newhan.cn/zhishi/a/167758972447413.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:對象名無效(sql server對象名無效).doc
本文 PDF 下載地址:對象名無效(sql server對象名無效).pdf
| 留言與評論(共有 0 條評論) |