1

Web ページ上の 3 つのテキスト ボックスを分割するストアド プロシージャを作成しようとしています。これらのテキスト ボックスにはすべてカンマ区切りの文字列が含まれています。テーブルには「combined_name」というフィールドがあり、@p1: 'grei,grie' @p2: 'joh,jon,j.. ' p3: は空です。

3 番目のボックスの理由は、結果をさらに絞り込むために、含まない、開始する、終了する、および IS の基本設定を取得した後です。

したがって、それらの任意の組み合わせを含むすべてのレコードを取得しようとしています。私はもともとLINQでこれを書きましたが、リストとデータセットを照会できないため機能しませんでした。データセットはリストに入れるには大きすぎる (130 万レコード) ため、ストアド プロシージャを使用する必要があります。

各フィールドを分割するために 1 つと選択クエリに 1 つ、合計 2 つの SP を使用する必要がありますか? tsqlのcontainsにはどの関数を使用しますか? IN win a query を使用してみましたが、複数のパラメーターでどのように機能するかわかりません。

これはアクセスが制限された内部サイトになるため、SQL インジェクションについて心配することは優先事項ではないことに注意してください。

動的 SQL を試みましたが、正しい結果が返されません:

    CREATE PROCEDURE uspJudgments @fullName nvarchar(100) AS
   EXEC('SELECT *
         FROM   new_judgment_system.dbo.defendants_ALL 
         WHERE  combined_name IN (' + @fullName + ')')
GO

EXEC uspJudgments @fullName = '''grein'', ''grien'''

これで正しい結果が得られたとしても、3 つのパラメーターを使用してこれを行うにはどうすればよいでしょうか?

4

2 に答える 2

3

これを使用して文字列を分割し、文字列のテーブルを取得できます。次に、すべての組み合わせを取得するには、これら 2 つのテーブルの完全な結合を使用できます。そして、選択を行います。

于 2012-10-19T07:23:27.090 に答える
-1

私が設定したテーブル値関数は次のとおりです。

ALTER FUNCTION [dbo].[Split] (@sep char(1), @s varchar(8000)) 
RETURNS table
AS
RETURN (     
    WITH splitter_cte AS (       
        SELECT CHARINDEX(@sep, @s) as pos, 0 as lastPos       
        UNION ALL      
        SELECT CHARINDEX(@sep, @s, pos + 1), pos       
        FROM splitter_cte       
        WHERE pos > 0     
    )     
    SELECT SUBSTRING(@s, lastPos + 1,                      
        case when pos = 0 then 80000                      
        else pos - lastPos -1 end) as OutputValues     
        FROM splitter_cte   
        )
)
于 2014-07-09T11:13:18.367 に答える