2017-02-17 69 views
-3

我是sql server的新手,需要幫助來創建一個查詢,以使用存儲過程在一次調用中將所有數據插入到表中。 例如,我有1個用戶(說「Tech」有Id 1)和客戶列表(「C#」,「ASP」,「MVC」)。
我的表結構 Id(PK),
UserId(FK)
Customers varchar。需要查詢將列表傳遞到SQL Server中的存儲過程

接受的結果一樣
用戶ID ---- | -----客戶
1 ---------- | ----- C#
1 ------ ---- | ----- ASP
1 -------------- ----- MVC

我會將userId和客戶列表傳遞給我的SP。

+0

......什麼?你試試? – DaniDev

+0

你的問題是什麼,你剛纔告訴我們你的要求,你沒有說明你自己實現這個問題。 –

+0

你有什麼試過? – NicoRiff

回答

1

這樣做的一種方法如下。我假設你有這樣的輸入格式@ userId = 1,@ListOfSubjects ='asp,c#'.. 這裏是示例過程。這個想法是首先將列表中的逗號分隔字符串轉換爲表格,然後插入它。爲此,我創建了一個樣本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' 

的UDF是如下

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

@Kida歡迎開心編碼 –

相關問題