0

.NETアプリとSQLServerの両方で正常に機能するクエリを作成しました。

しかし、幅広いパラメーターを使用してテストしたところ、その特定の場合、.NETアプリでは何も表示されませんが、SQLServerでは結果が表示されることがわかりました。

私はグーグルしようとしましたが、少し奇妙な結果はありませんでした。だから、私はここで尋ねています。

これは私の質問です:

 SELECT DISTINCT 
        tblCustomers.customerID AS Customer#, 
        tblCustomers.firstName + ' ' + tblCustomers.surname AS Name, 
        tblCustomers.street AS Street, 
        tblCustomers.suburb AS Suburb, 
        tblCustomers.postCode AS Postcode, 
        tblCustomers.state AS State, 
        tblCustomers.country AS Country, 
        tblCustomers.phone AS [Phone No.], 
        tblCustomers.fax AS Fax, 
        tblCustomers.mobilePhone AS [Mobile Phone], 
        tblCustomers.email AS [E-mail]
  FROM    
        tblCustomers 
  INNER JOIN
        tblProduct_Backorder ON tblCustomers.customerID = tblProduct_Backorder.customerId
  WHERE     
        (tblCustomers.customerID IN
              (SELECT     
                   customerId
                FROM          
                    tblProduct_Backorder AS tblProduct_Backorder_1
                WHERE      
                    (productId IN
                            (SELECT     
                                 productID
                             FROM 
                                 tblProducts
                             WHERE      
                                (skuCode = 76761)
                    )
                 )
           )
       )

このクエリはでは機能しませんskuCode = 76761が、SQLServerでは正常に機能します。

ありがとう。

4

2 に答える 2

1

あなたの質問には、問題の原因を推測するのに十分な情報がありません。それまでの間、クエリの代わりにこれを試してください:

SELECT c.customerID AS [Customer#],
        c.firstName + ' ' + tblCustomers.surname AS Name,
        c.street AS Street,
        c.suburb AS Suburb,
        c.postCode AS Postcode,
        c.state AS State,
        c.country AS Country,
        c.phone AS [Phone No.],
        c.fax AS Fax,
        c.mobilePhone AS [Mobile Phone],
        c.email AS [E-mail]
 FROM   dbo.tblCustomers c
 WHERE  EXISTS ( SELECT 1
                 FROM   dbo.tblProduct_Backorder b
                 JOIN   dbo.tblProduct p
                        ON b.productId = p.productId
                 WHERE  p.skuCode = 76761
                        AND b.customerId = c.customerId );                              

テーブルのリレーションシップを正しく理解していれば、はるかに少ない作業で同じ結果が得られます。

元の質問については、.net コードも投稿する必要があります。また、「結果が出ない」とはどういう意味ですか? 空の結果?タイムアウト?エラー?

于 2013-02-12T02:20:19.283 に答える
0

xQbertのコメントの助けを借りて解決策を見つけました。時間をかけて、SQL プロファイラーでクエリがどのように実行されるかを確認しました。テーブル tblProduts の skuCode は nvarchar(6) で、テーブル tblProduct_BackOrder の Integer です。そのため、Convert() 関数を使用して同じパラメーターの整数に変換しました。

于 2013-02-15T01:49:23.360 に答える