2016-03-31 15 views
1

一つの値の複数の値を挿入するには:MSSQLの手順ではなく、私はこのMSSQL手順持っ

CREATE PROCEDURE InsertCodeIfNotExist 
    @Code nvarchar(32) 
AS 
    INSERT Codes (Code) 
    SELECT @Code 
    WHERE NOT EXISTS 
      (SELECT 1 
      FROM Codes 
      WHERE Code = @Code 
     ); 

私のためにうまく動作しますが、私はそれのような100の値とコールと連携持つことができる場合、私は良いだろう各値のこの手順。それはmssqlで可能ですか? InsertManyCodesIfNotExistのように定義し、そこに何百もの値をループすることはできますか?

+0

:あなたがここに見つけることができます

/* Create a table type. */ CREATE TYPE CodeTableType AS TABLE (Code VARCHAR(32)); GO /* Create a procedure to receive data for the table-valued parameter. */ CREATE PROCEDURE dbo.InsertCodeIfNotExist @TVP CodeTableType READONLY AS SET NOCOUNT ON INSERT INTO Codes (Code) SELECT Code FROM @TVP; 

詳細'?また、 '@ Code'の値があなたのテーブルで一意であることを確認したいのではないかと思います。なぜなら、それを' UNIQUE'カラムとして作るのはなぜですか? –

+0

@RahulTripathi私はこのような入力パラメータを定義するnode.js mssqlパッケージを使用しています。https://github.com/patriksimek/node-mssql#input – Capaj

+0

@RahulTripathi私はこのように定義した制約があります:ALTER TABLEコードADD CONSTRAINTコードUNIQUE(コード) – Capaj

答えて

3

はい、これはかなり簡単にいくつかの異なる方法で行うことができます。あなたのケースでは

CREATE TYPE [dbo].[ModuleList] AS TABLE(
    [SubId] [varchar](12) NOT NULL, 
    PRIMARY KEY CLUSTERED 
(
    [SubId] ASC 
)WITH (IGNORE_DUP_KEY = OFF) 
) 

、SUBIDに代わる「コード」:私はこのような状況を扱う一つの方法は、そのような私は以下の使用一つとして、ユーザー定義のデータ型を作成することです。次に、この型をT-SQLで作成し、コードを入力して、ストアドプロシージャのパラメータとして渡します。

あなたのストアドプロシージャは、次のようにこのパラメータを取るように設定されます:

CREATE PROCEDURE [dbo].[SomeStoredProc] 
    @ModuleList ModuleList READONLY 
AS 
... 

として、あなただけのテーブルのよう@ModuleListを扱うことができます。あなたのケースでは、コードのテーブル。

+0

[テーブル値のパラメータ](https://msdn.microsoft.com/en-AU/library/bb510489)と呼ばれる答えを明確にすると怪我をしません.aspx)。 –