如何解決“SQL對象名無效”的問題
今天遇到一個讓人不淡定的問題.
網(wǎng)站升級后,打開一個頁面無法訪問, 提示: “對象名”xxx”無效.
xxx表在服務(wù)器上沒有創(chuàng)建,于是俺打開 “sql查詢分析器”:
導(dǎo)出創(chuàng)建xxx表的sql腳本,如下:
- CREATE TABLE [xxx] (
- [id] [int] IDENTITY (1, 1) NOT NULL ,
- [title] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,
- [kind] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,
- [content] [nvarchar] (1000) COLLATE Chinese_PRC_CI_AS NOT NULL ,
- [keyword] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
- [Add_Date] [datetime] NULL
- ) ON [PRIMARY]
然后在服務(wù)器上創(chuàng)建. 再次刷新, 提示: 對象名”xxx”無效. 香蕉你個扒拉~~
Google上搜索, 可能的原因是 數(shù)據(jù)庫所有者問題. 數(shù)據(jù)庫可以有不同的登陸帳戶,
而數(shù)據(jù)庫是可以隸屬于某個帳戶的, 于是問題就出來了.
假若在pubs庫中l(wèi)ogina帳戶登陸并創(chuàng)建一個x表, 然后loginb帳戶登陸并查詢x表
就提示: 對象名”xxx”無效.
我勒你個去!~
以下省略N個
鬼知道剛才那個腳本將表創(chuàng)建到那個用戶下了. 于是,聰明的我又打開”企業(yè)管理器”,
選中表 導(dǎo)出sql腳本,這次出來的腳本就帶上 所有者了:
- CREATE TABLE [logina].[xxx] (
- [id] [int] IDENTITY (1, 1) NOT NULL ,
- [title] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,
- [kind] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,
- [content] [nvarchar] (1000) COLLATE Chinese_PRC_CI_AS NOT NULL ,
- [keyword] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
- [Add_Date] [datetime] NULL
- ) ON [PRIMARY]
- GO
于是俺drop table 服務(wù)器上的 xxx 表,又運行了上面的腳本.
再次刷新, 娘西匹! 還是:對象名”xxx”無效.
我數(shù)據(jù)庫訪問層使用的是subsonic, 于是我就看了subsonic生成的代碼,發(fā)現(xiàn)有這樣
一行:
- schema.SchemaName = @"dbo";
哇! 可俺數(shù)據(jù)庫連接字符串中的登陸名不是這個玩意兒啊!
但是, 其他的表貌似查詢啥的都無問題??????????????????????????????
于是,俺在服務(wù)器上運行的代碼中加了如下一行:
- output q.BuildSqlStatement();
俺直接將生成的查詢代碼在服務(wù)器上運行,提示: 對象名”xxx”無效.
我日,有門~!
因為生成的腳本中,xxx表前加的所有者是”dbo”. 我靠~
再次, drop table xxx, 然后:
- CREATE TABLE [dbo].[xxx] (
- [id] [int] IDENTITY (1, 1) NOT NULL ,
- [title] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,
- [kind] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,
- [content] [nvarchar] (1000) COLLATE Chinese_PRC_CI_AS NOT NULL ,
- [keyword] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
- [Add_Date] [datetime] NULL
- ) ON [PRIMARY]
- GO
再次刷新, 可愛的小姑娘到底還是害羞的走了出來.~~~
總結(jié):
1,在真實的生產(chǎn)環(huán)境中,需要注意 表所有者的問題.
2,不同的所有者創(chuàng)建的表,在其他用戶登錄下是訪問不到的,會提示: 對象名”xxx”無效.
3,為啥我的登陸名是 logina 但加上logina卻提示: 對象名”xxx”無效? 因為subsonic
生成的腳本使用的是 dbo. 為什么? 鬼知道~~
原文鏈接:http://www.cnblogs.com/andysunndy/archive/2011/05/16/2047514.html
【編輯推薦】
- 淺述遠程Service Broker的實現(xiàn)
- Service Broker基礎(chǔ)應(yīng)用(下)
- Service Broker基礎(chǔ)應(yīng)用(上)
- 告訴你如何解決MySQL server has gone away問題
- SQL使用中的點滴回憶