SQL的执行者

起源:最近有同事在执行存储过程和SQL语句,存储过程中的SQL和SQL语句一样,却发现执行的结果不一样,经分析发现是表的所有者不同造成

 

 

Create proc TestProc

@ProductID int

 

as

 

Begin

 

    Select ProductName From ProductInfo Where ProductID=@ProductID

 

End

 

 

 

 

----------------------------于查询分析器执行测试----------------------------------------------

 

测试一

exec TestProc 2312

 

测试二

Select ProductName From ProductInfo Where ProductID=2312

 

发现测试一没有结果,但测试二有结果

 

 

当表ProductInfo的所有者不是dbo时,就会发生此种现象,或会出现表中明明有数据,但两种都没有数据返回

 

测试一无结果,测试二有结果,是因为查询分析登录的恰好为表Product的所有者,如表的所有者为了Berlin,用这个账号去登录查询分析器时,就会产生测试一无结果,测试二有结果了

 

延伸:为什么测试一也是用表所有者Berlin登录到查询分析器,为什么还是没有结果呢,猜想,执行SP时,用的是SQL Server内置账号执行的,而不是用Berlin去执行的,真的是这样吗?

posted @ 2010-06-03 20:57  风清云淡  阅读(347)  评论(0编辑  收藏  举报