2017-02-17 5 views
-3

SQL Serverの新機能で、ストアドプロシージャを使用して1つの呼び出しですべてのデータをテーブルに挿入するためのクエリを作成するのに役立つ必要があります。 たとえば、1人のユーザー(「Tech」にはId 1)と顧客の一覧(「C#」、「ASP」、「MVC」)があります。
Myテーブルの構造 Id(PK)、
UserId(FK)
得意先varchar。SQL Serverのストアドプロシージャにリストを渡すクエリが必要

受理結果
ユーザーIDのような---- | -----お客様
1 ---------- | ----- C#の
1 ------ ---- | ----- ASP
1 ---------- | ----- MVC

私はuserIdと顧客のリストを私のSPに渡します。

+0

を次のようにUDFがある...と何をしようとしたのですか? – DaniDev

+0

あなたの質問は何ですか、あなたの要件を教えてくれただけで、これを自分で実装している問題は何も述べていません。 –

+0

あなたは何を試しましたか? – NicoRiff

答えて

1

これを行う1つの方法は次のとおりです。私はあなたがこの形式@ userId = 1、@ ListOfSubjects = 'asp、c#'のような入力を持っていると仮定しています.. ここはサンプルのprocです。最初にコンマで区切った文字列を表に変換して挿入します。これを行うために、コンマ区切りの文字列が渡されたときにテーブルを返すサンプルUDFを作成しました。

 create proc SampleUser_Insert 
     @UserId int , 
     @ListOfSubjects varchar(1000) 
     as 
     begin 

      --set @UserId=1 
      --set @ListOfSubjects ='asp,c#,mvc' 


      declare @sampleTable table (userId int, subjects varchar(100)) 

      insert into @sampleTable (userId,subjects) 

      SELECT @userId, data FROM dbo.[SplitString](@ListOfSubjects, ',') 
      select * from @sampleTable 

     end 

    -- exec SampleUser_Insert 1,'a,b,c' 

CREATE FUNCTION [dbo].[SplitString] 
    (
     @String NVARCHAR(4000), 
     @Delimiter NCHAR(1) 
    ) 
    RETURNS TABLE 
    AS 
    RETURN 
    (
     WITH Split(stpos,endpos) 
     AS(
      SELECT 0 AS stpos, CHARINDEX(@Delimiter,@String) AS endpos 
      UNION ALL 
      SELECT endpos+1, CHARINDEX(@Delimiter,@String,endpos+1) 
       FROM Split 
       WHERE endpos > 0 
     ) 
     SELECT 'Id' = ROW_NUMBER() OVER (ORDER BY (SELECT 1)), 
      'Data' = SUBSTRING(@String,stpos,COALESCE(NULLIF(endpos,0),LEN(@String)+1)-stpos) 
     FROM Split 
    ) 
    GO 
+0

ありがとう@Yashveer Singh – Kida

+0

@キダ歓迎幸せなコーディング –

関連する問題