执行存储过程时 提示 "对象名无效(表名)"

Jack_Yin 2008-10-18 10:28:36
如题:执行存储过程时 提示 "对象名无效(表名)" ,请高手赐教!
存储过程定义:

CREATE proc CheckLogin
@UserName varchar(20) ,@UserPassword varchar(40),
@Msg varchar(100) output,
@ResultID bit output
as
begin

declare @ResultCount int /*返回行数*/
declare @StoredPassWord varchar(40) /*传递查询得到的密码*/

select @ResultCount = count(*) from S_UserInfo where UName = @UserName

if @ResultCount = 0
begin
set @Msg = '用户名不存在,请重新输入!'
set @ResultID = 0
end
else
begin
select @StoredPassWord = UPassword from S_UserInfo where UName = @UserName
if @StoredPassWord = @UserPassword
begin
set @Msg = '登录成功!'
set @ResultID = 1
end
else
begin
set @Msg = '密码或用户名错误'
set @ResultID = 0
end
end
end


执行代码:

declare @m varchar(50),@r bit
execute CheckLogin 'aaa','111', @m output,@r output
select @m ,@r


提示错误:
对象名 'S_UserInfo' 无效。

...全文
1863 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingxiangy 2012-02-17
  • 打赏
  • 举报
回复
表名前面有没有加上dbo的权限问题啊
张天启 2011-03-10
  • 打赏
  • 举报
回复
看来得了解系统的存储过程啊! 你们谁有相关的资料能给点小弟不 邮箱htMonarch@163.com 谢谢了
张天启 2011-03-10
  • 打赏
  • 举报
回复
又学到了以点东西
迷途的书童 2008-10-18
  • 打赏
  • 举报
回复
学习中。。。
Jack_Yin 2008-10-18
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 CN_SQL 的回复:]
引用 10 楼 Jack_Yin 的回复:
引用 9 楼 CN_SQL 的回复:
你应该是要去修改表所有者为dbo

这个正解啊,我该了就可以了.
现在想想 是不是还是把 表的所有者 改回来,然后将存储过程的所有者 改成和表的所有者

因为默认的对象所有者是DBO,所以你在访问对象时,可以不写它,但是如果不是DBO的话,你在访问对象时
就需要指定所有者,所以最好是修改为dbo.
[/Quote]
把 表和存储过程的所有者 改成一样的(是一个登录用户名) 然后在用这个用户登录就可以用了
Jack_Yin 2008-10-18
  • 打赏
  • 举报
回复
弄明白了 谢谢各位!
CN_SQL 2008-10-18
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 Jack_Yin 的回复:]
引用 9 楼 CN_SQL 的回复:
你应该是要去修改表所有者为dbo

这个正解啊,我该了就可以了.
现在想想 是不是还是把 表的所有者 改回来,然后将存储过程的所有者 改成和表的所有者
[/Quote]
因为默认的对象所有者是DBO,所以你在访问对象时,可以不写它,但是如果不是DBO的话,你在访问对象时
就需要指定所有者,所以最好是修改为dbo.
Jack_Yin 2008-10-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 CN_SQL 的回复:]
你应该是要去修改表所有者为dbo
[/Quote]
这个正解啊,我该了就可以了.
现在想想 是不是还是把 表的所有者 改回来,然后将存储过程的所有者 改成和表的所有者
CN_SQL 2008-10-18
  • 打赏
  • 举报
回复
你应该是要去修改表所有者为dbo
CN_SQL 2008-10-18
  • 打赏
  • 举报
回复

CREATE proc CheckLogin
@UserName varchar(20) ,@UserPassword varchar(40),
@Msg varchar(100) output,
@ResultID bit output
as
begin

declare @ResultCount int /*返回行数*/
declare @StoredPassWord varchar(40) /*传递查询得到的密码*/

select @ResultCount = count(*) from 表所有者.S_UserInfo where UName = @UserName

if @ResultCount = 0
begin
set @Msg = '用户名不存在,请重新输入!'
set @ResultID = 0
end
else
begin
select @StoredPassWord = UPassword from 表所有者.S_UserInfo where UName = @UserName
if @StoredPassWord = @UserPassword
begin
set @Msg = '登录成功!'
set @ResultID = 1
end
else
begin
set @Msg = '密码或用户名错误'
set @ResultID = 0
end
end
end



你能调用这个存储过程,那应该是表所有者问题,导致你无法访问,如果你有权限,你必须这样修改:

水族杰纶 2008-10-18
  • 打赏
  • 举报
回复
单个修改所有者sql语句如下:
查询分析器输入:EXEC sp_changeobjectowner 'user.table', 'dbo'
user.table的意思为:所有者.表名,比如oblog.oblog_user,以上的语句表示将table这张表的所有者由
user改成dbo
量修改所有者语句如下:
查询分析器输入:exec sp_msforeachtable 'sp_changeobjectowner ''?'', ''dbo'''
即可把当面表的所有所有者换成dbo

CN_SQL 2008-10-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Jack_Yin 的回复:]
用表的所有者 账号登录 应该有权限访问这个表吧,但是这个存储过程的所有者是dbo 不知道怎么
更改存储过程的所有者?
[/Quote]


--更改对象所有者
sp_changeobjectowner [ @objname = ] 'object' , [ @newowner = ] 'owner'


水族杰纶 2008-10-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Jack_Yin 的回复:]
用表的所有者 账号登录 应该有权限访问这个表吧,但是这个存储过程的所有者是dbo 不知道怎么
更改存储过程的所有者?
[/Quote]
--try
--数据库.dbo.UserInfo
水族杰纶 2008-10-18
  • 打赏
  • 举报
回复
--先确定表S_UserInfo是否存在
--如果存在写成 --库名.所有着.UserInfo 看看你的所有者是什么~~
Jack_Yin 2008-10-18
  • 打赏
  • 举报
回复
用表的所有者 账号登录 应该有权限访问这个表吧,但是这个存储过程的所有者是dbo 不知道怎么
更改存储过程的所有者?
Jack_Yin 2008-10-18
  • 打赏
  • 举报
回复
补充:表'S_UserInfo' 已经建好 并且 有数据 用户名aaa 密码 111
CN_SQL 2008-10-18
  • 打赏
  • 举报
回复
你的表未创建,或者你未有权限访问这个表,下面的语句执行一下,看看什么结果

exec sp_help 'S_UserInfo'

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧