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
























