每当我调用包含多个选择语句的存储过程时,我在结果集中没有任何行,尽管在 SP 之外运行相同的代码会返回预期的结果。在开发服务器上安装生产环境中的数据库备份时,这种情况已经开始发生。
以下示例在 Enterprise Manager 2008 中运行时不返回任何行:
exec dbo.USP_S_CustomerLimit '00000053-0000-1148-5300-000000000000'
但是,如果我自己执行该过程中的所有代码(例如选择它并按“运行”),我会得到预期的结果行数量:
SELECT * FROM CustomerLimit WHERE Department =
(SELECT Department FROM Customer WHERE CustomerID = CONVERT(BINARY(16), CONVERT(UNIQUEIDENTIFIER, '00000053-0000-1148-5300-000000000000')))
我也尝试过这种代码变体,不幸的是它的行为方式完全相同:
SELECT CustomerLimit.* FROM CustomerLimit
JOIN Customer ON Customer.Department = CustomerLimit.Department
WHERE Customer.CustomerID = CONVERT(BINARY(16), CONVERT(UNIQUEIDENTIFIER, '00000053-0000-1148-5300-000000000000'))
我觉得这是某种正确的问题,但我不知道在哪里检查。我是服务器上的 db_owner,我也属于相关数据库中的 db_owner 组。这个问题的原因可能是什么?如果我只用一个选择创建一个测试过程,feSelect * from Customer
那么我在执行该过程时会得到正确的结果,但是如果我写 feSelect * from Customer where CustomerID in (select CustomerID from Customer)
那么我没有得到任何行.. :(