首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2012-03-08 
执行存储过程时 提示 对象名无效(表名)如题:执行存储过程时 提示 对象名无效(表名) ,请高手赐教!存储

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

SQL code
CREATE proc CheckLogin     @UserName varchar(20) ,@UserPassword varchar(40),    @Msg varchar(100) output,    @ResultID bit outputasbegin    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    endend 

执行代码:
SQL code
declare @m varchar(50),@r bitexecute CheckLogin 'aaa','111', @m output,@r outputselect @m ,@r


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



[解决办法]
你的表未创建,或者你未有权限访问这个表,下面的语句执行一下,看看什么结果
SQL code
exec sp_help 'S_UserInfo'
[解决办法]
SQL code
--先确定表S_UserInfo是否存在--如果存在写成 --库名.所有着.UserInfo 看看你的所有者是什么~~
[解决办法]
探讨
用表的所有者 账号登录 应该有权限访问这个表吧,但是这个存储过程的所有者是dbo 不知道怎么
更改存储过程的所有者?

[解决办法]
探讨
用表的所有者 账号登录 应该有权限访问这个表吧,但是这个存储过程的所有者是dbo 不知道怎么
更改存储过程的所有者?

[解决办法]
单个修改所有者sql语句如下:
查询分析器输入:EXEC sp_changeobjectowner 'user.table', 'dbo'
user.table的意思为:所有者.表名,比如oblog.oblog_user,以上的语句表示将table这张表的所有者由
user改成dbo
量修改所有者语句如下:
查询分析器输入:exec sp_msforeachtable 'sp_changeobjectowner ''?'', ''dbo'''
即可把当面表的所有所有者换成dbo 


[解决办法]
SQL code
CREATE proc CheckLogin     @UserName varchar(20) ,@UserPassword varchar(40),    @Msg varchar(100) output,    @ResultID bit outputasbegin    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    endend
[解决办法]
你应该是要去修改表所有者为dbo
[解决办法]
探讨
引用:
你应该是要去修改表所有者为dbo

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

热点排行