起源:最近有同事在执行存储过程和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去执行的,真的是这样吗?