0

解決しました!

結局のところ、原因は Buyer テーブルで使用されたクエリでした。データは、カンマ区切りの文字列を分割して行に再構築することにより、再帰的な共通テーブル式から取得されました。この問題をさらに掘り下げると、共通の接合値の最初の文字列が返され、それをサプライヤ テーブルとの比較として使用していたため、他の変数が使用できなくなっていました。

私が修正した方法は、結果を一時テーブルに保存し、再帰が終了した後にそれを参照することでした(この場合、更新コードに変更しました)

SSMS は、別のコード セットで参照される前にコードが最初に CTE を終了するのを待機するため、これを正しく処理しますが、WPF はクライアント コンピューター上のローカル ドライバーを使用します。ドライバーは再帰的 CTE のケースを処理しなかったため、比較のためにコードの最初のパスを返しました。

ご協力いただきありがとうございます。コードを分解する必要がある場所と、機能していない場所と機能している場所をさらに分析する必要があるという洞察が得られました。

私はこの問題に2日間苦労しています。コードとステートメントを書き直しましたが、同じ結果になりました。

私の目標は、別のテーブルから同様のバイヤー名を持つサプライヤー リストから完全な名前を取得できるようにすることです。私が使用したコード:

SELECT BuyerID, SupName 
FROM Buyers b 
LEFT OUTER JOIN suppliers s ON s.supname LIKE RTRIM(b.BuyerName) + '%'

私もこのコードを試しました

SELECT b.BuyerID, b.BuyerName, s.SupName 
FROM Buyers b, suppliers s 
WHERE PATINDEX(RTRIM(b.BuyerName) + '%', s.supname) <> 0

予想される出力は次のようになります。以下に示すように、Microsoft SQL Server Management Suite から同じ結果が生成されます。

BuyerID | BuyerName | Supname
--------+-----------+---------------------
AA      | Alfrac    | Alfrac Insurance.
BC      | Bank      | Bank of America
CC      | Charle    | Charles Dawnson

私のWPF出力結果は次のようになります。

BuyerID | BuyerName | Supname
--------+-----------+---------------------
AA      | Alfrac    | Null
BC      | Bank      | Null
CC      | Charle    | Charles Dawnson

WPF で使用したコードは次のとおりです。

string sql = ReadEmbeddedResource("Queries.GetBuyerSupplier.sql");
DataSet Data = new DataSet();
using (SqlCommand cmd = new SqlCommand(sql, new SqlConnection(ConfigurationManager.ConnectionStrings["sqldb"].ConnectionString)))
{
    cmd.Connection.Open();
    using (SqlDataAdapter da = new SqlDataAdapter(cmd))
        da.Fill(Data);
    cmd.Connection.Close();
}

Queries.GetBuyerSupplier.sql には、上記の SQL コマンドがあります。

これが私が試したことのリストです:

  1. グーグル
  2. アリサボートをオンに設定
  3. オプション(再コンパイル)
  4. 共通テーブル式
  5. 一時テーブルの宣言と使用
  6. ログイン資格情報の変更 (SQL とドメイン認証の使用)

私が使用しているツールのバージョン:

Microsoft SQL Server 2014 (SP2-GDR) (KB4019093) - 12.0.5207.0 (X64) 2017 年 7 月 3 日 02:25:44 Windows NT 6.3 上の Microsoft Corporation Standard Edition (64 ビット) (ビルド 9600: ) (ハイパーバイザー)

SQL クライアント ドライバー: Microsoft SQL Server 2008 R2 Native Client v 10.50.1617.0

Microsoft Visual Studio Professional 2015 V 14.0.25431.01 Update 3
Microsoft .NET Framework V 4.7.02558 OS: Windows 7 64 ビット。

4

1 に答える 1