複数のselectステートメントを含むストアドプロシージャを呼び出すと、SPの外部で同じコードを実行すると期待される結果が返されますが、結果セットに行が表示されません。これは、実稼働環境からのデータベースバックアップが開発サーバーにインストールされるまでに発生し始めました。
以下の例では、EnterpriseManager2008で実行したときに行が返されません。
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であるグループにも属しています。この問題の原因は何でしょうか?1つのselect、feだけでテストプロシージャを作成すると、Select * from Customer
そのプロシージャを実行したときに正しい結果が得られますが、feと書くSelect * from Customer where CustomerID in (select CustomerID from Customer)
と、行が得られません。:(