2017-02-17 20 views
-3

Я новичок в sql-сервере и мне нужна помощь в создании запроса для вставки всех данных в таблицу за один вызов с использованием хранимой процедуры. Например, у меня 1 пользователь (скажем, «Tech» имеет Id 1) и список клиентов («C#», «ASP», «MVC»).
My Table structure Id (PK),
UserId (FK)
Клиенты varchar.Необходим запрос для передачи списка хранимой процедуре в SQL Server

Принимается результат как
UserId ---- | ----- Клиенты
1 ---------- | ----- C#
1 ------ ---- | ----- ASP
1 ---------- | ----- MVC

Я передам userId и список клиентов для моего SP.

+0

... и что вы пробовали? – DaniDev

+0

Каков ваш вопрос, вы только что сказали нам свои требования, вы не указали, в чем проблема, которую вы реализуете самостоятельно. –

+0

Что вы пробовали ?. – NicoRiff

ответ

1

Один из способов сделать это следующим образом. Я предполагаю, что у вас есть вход, подобный этому формату @ userId = 1, @ListOfSubjects = 'asp, C#'. вот пример proc. Идея состоит в том, чтобы сначала преобразовать список od comma, отделив строку ofsubject к таблице, а затем вставить ее. Для этого я создал образец 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

@Kida приветствуем счастливое кодирование –

 Смежные вопросы

  • Нет связанных вопросов^_^