1

私は SQL Server 2005 の初心者で、簡単なはずのことをしなければなりませんが、問題があります。

当分の間、ストアド プロシージャは csv をデータベースの 1 つの列に格納しています。csv を複数の列に分割する必要があります。CSV パラメータの値の数は静的で、常に 8 つの値があり、常に同じ順序になります。データの例を次に示します。

req,3NxWZ7RYQVsC4chw3BMeIlywYqjxdF5IUX8GMUqgJlJTztcXQS,192.168.208.78,getUserInfo,AssociateService,03303925,null,M042872, 

このパラメーターをストアド プロシージャで分離して、別の列に挿入できるようにするために使用する最適な関数は何ですか? 私は部分文字列を見ていましたが、それは位置的であり、正規表現を認識していないようです??

ありがとう、クリス

4

3 に答える 3

2

SQL Server にはネイティブ機能がありません。関数を作成する必要があります (一般に「分割」と呼ばれます)。このスレッドは、多くの TSQL オプション を提供し、あなたが求めているのと同じ答えを探しています。不足しているのは、大量のコンマ区切りデータをテストすることですが、要件はとにかく列ごとに 8 つの値のみです...

SQL Server 2005+ は SQLCLR をサポートしており、機能を .NET コードに渡すことができます。.NET コードはアセンブリとして SQL Server インスタンスに配置する必要があり、TSQL 関数/プロシージャを作成してアセンブリ内の機能を公開する必要があります。

于 2010-09-28T20:04:38.387 に答える
2

SUBSTRING 定位置ですが、CHARINDEX関数を使用して各区切り文字の位置を見つけ、各コンマ間の SUBSTRING を取得できます。

確かに、これは不格好なソリューションですが、常に順番に表示される少数の静的フィールドを考えると、影響は最小限に抑えられます...

于 2010-09-28T20:05:37.273 に答える
0

特に SQL-CLR を使用できない場合、SQL Server は文字列処理にあまり強くありません。

CSV を非常に簡単にインポートして各行のオブジェクトに分割する C# ライブラリであるFileHelpersなどを使用して、クライアント アプリケーションで事前にこれを行う方がよい場合があります。

それができたら、オブジェクトの配列を簡単にループして、個々のオブジェクト プロパティをリレーショナル テーブルに挿入できます。

于 2010-09-28T20:24:14.283 に答える