1

テーブル内のリスト名とそれに対応する (ブール/ビット) 値をチェックするストアド プロシージャを作成しようとしています。レコードの 1 つに true の値がある場合でも、ストアド プロシージャは True を返し、そうでない場合は false を返します。

これがテーブルです。

Table Name - FruitCrate
Column A (VarChar (Max)) - FruitName
Column B (bit)  -  Eatable

ここで、リスト FruitNames を提供できるストアド プロシージャが必要です。それらのいずれかが食べられるかどうかを確認し、それ以外の場合は false を返します。

リストをストアド プロシージャにパラメータとして送信したことがないため、開始方法がわかりません。

編集

これは私がしようとしているものですが、構文エラーが発生しています。

Create PROCEDURE [dbo].[ProcedureName]
(
    @FruitNames varchar(max)
)
AS

Select * From    
(SELECT * FROM  FruitCrate WHERE FruitName IN (' +@FruitNames+ '))

WHERE FruitCrate.Eatable= 1

エラー **

... ')' 付近の構文が正しくありません.... キーワード 'WHERE' 付近の構文が正しくありません。

**

4

2 に答える 2

1

ステップ 1 : fruitNames をカンマ区切り (または果物名に含まれていないその他の区切り文字、ex'!'または'|') 文字列として送信できます。

ステップ 2 : 区切られた文字列 ( thisなど)を分割するには、テーブル値の T-Sql 関数が必要です(たとえば、テーブルの列名はmyColumn)

CREATE FUNCTION  Split (@String nvarchar(4000), @Delimiter char(1))
RETURNS @Results TABLE (myColumn nvarchar(500))
AS
BEGIN

    --Function body
    RETURN @Results
END

ステップ 3 : 分割されたフルーツ名をテーブルと比較するストアド プロシージャを記述します。

CREATE PROCEDURE CheckEatables
   @fruitName nVarchar(4000) --Change the length as required
AS
BEGIN
    SELECT FruitName, COALESCE(Eatable,0) Eatable
    FROM FruitCrate fc JOIN dbo.Split(@fruitNames,',') fn
                   ON fc.FruitName = fn.myColumn
END
于 2013-09-09T10:03:48.547 に答える
1

ID のコンマ区切りリストを使用するこの質問を参照できます。

ストアドプロシージャに同じ実装があります

于 2013-09-09T09:46:15.283 に答える