0

每当我调用包含多个选择语句的存储过程时,我在结果集中没有任何行,尽管在 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)那么我没有得到任何行.. :(

4

1 回答 1

0

检查您是否拥有所有这三个表的权限/权限。检查 sys.objects 以获取这些表的列表。

于 2012-05-08T11:34:25.433 回答