<thead id="66mnk"><delect id="66mnk"><em id="66mnk"></em></delect></thead>

        1. <thead id="66mnk"></thead>
        2. <var id="66mnk"></var>
        3. <acronym id="66mnk"><li id="66mnk"><tt id="66mnk"></tt></li></acronym>
        4. 狼邦科技  
          專注于高品質網站建設、軟件開發、視頻監控、系統集成、網絡工程等信息化服務于一體的科技公司
          網站首頁 關于狼邦 產品中心 案例展示 解決方案 新聞資訊 聯系方式
          您當前的位置:首頁 >> 詳細內容
           
          詳細內容  
          SQL對象名無效的解決方法


          使用sqlserver數據庫時,產生SQL對象名無效的問題一般是以下兩種常見原因,下面根據不同的原因給出解決方法。
          原因一:新建的數據庫,沒有將初始數據導入到新庫里。
          解決方法:請登錄到我司數據庫控制面板->備份還原系統,然后使用數據庫還原的功能,在那里直接將您的數據庫備份上傳還原,如果操作過程沒有出現錯誤,一般您的數據庫就已經還原了,此方法適合還原一些初始數據不是很大的數據庫(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 這樣的方式,就是在程序中不在用對象的完整名稱,而是單使用表名或視圖名,這樣就可以避免不必要的“對象名無效”的問題。

          ?


          打印本頁】 【關門窗口
          上一篇:新站該如何進行SEO優化 [2013/4/14]
          下一篇:Asp.net 文件上傳示例代碼 [2013/4/14]
             
           監控維修手冊 []
           超市監控/店鋪監控/超市網... []
           SQL對象名無效的解決方法 []
           ASP.net發郵件的實例 []
           微軟.NET戰略和ASP.NET簡介 []
           Asp.net 文件上傳示例代碼 []
           熱烈祝賀威寧縣人民政府門... []
           站點代碼優化(全面提高頁面... []
           新站該如何進行SEO優化 []
           2014年春節放假通知 []
          旗下網站:苗族文化網
          Copyright www.transciptomics.com 版權所有:貴州狼邦科技有限公司
          ICP備案/許可證編號:黔ICP備12004694號 貴公網安備:52010302001843號
          地址:貴州省貴陽市云巖區延安西路67號8層21號 電話:0851-85111798
          軟件開發/網站建設業務:13688513435(潘先生) 視頻監控/系統集成業務:18785512637(潘先生)
          技術支持:13688513435(潘先生) 客戶服務:18985103435(王女士)
          A片在线观看免费视频网站

            <thead id="66mnk"><delect id="66mnk"><em id="66mnk"></em></delect></thead>

                1. <thead id="66mnk"></thead>
                2. <var id="66mnk"></var>
                3. <acronym id="66mnk"><li id="66mnk"><tt id="66mnk"></tt></li></acronym>