2017-01-27 6 views
0

Ich habe die folgende Aufgabe gegeben: Ich muss eine gespeicherte Prozedur mit zwei Parametern schreiben: @Court int, @ReportId NVARCHAR(400) und ich muss die @ReportId Parameter durch Leerzeichen teilen, konvertieren jedes Stück (von @ReportId) in int und sowohl dieses Stück verwenden und die Parameter @Court einen Einfügevorgang wie folgt auszuführen:Ich brauche Hilfe für eine bestimmte sql Aufgabe

insert into RPT_Report2court (Reportid, courtnumber) 
    values (@ReportId, @Court) 

für jedes Stück @ReportId Parameters (int umgewandelt).

Bisher habe ich folgendes getan:

SELECT CAST(value AS int) 
FROM STRING_SPLIT(@ReportId, ' ') 

, aber ich weiß wirklich nicht, wie diese Werte int iterieren und nehmen sie sie für die Insert-Anweisungen zu verwenden. (Wenn die Sprache C# und nicht SQL ist, würde ich diese int-Werte in eine Liste von Ints schreiben und einfach mit foreach über diese Liste iterieren, aber ich weiß nicht, wie man das mit sql macht).

+0

Die Syntax schlägt SQL Server vor, also habe ich das Tag hinzugefügt. –

+2

Und jetzt wollen Sie, dass wir Ihre Arbeit erledigen? – jarlh

+0

Wenn Sie die Daten von C# übergeben, würde ich vorschlagen, einen Tabelle-Wert-Parameter zu verwenden, anstatt eine begrenzte Zeichenfolge zu übergeben. –

Antwort

0

UserDefined Funktion Split erstellen.

CREATE FUNCTION [dbo].[Split](@String varchar(8000), @Delimiter char(1))   
returns @temptable TABLE (SplitValue varchar(8000))   
as   
begin   
    declare @idx int   
    declare @slice varchar(8000)   

    select @idx = 1   
     if len(@String)<1 or @String is null return   

    while @idx!= 0   
    begin   
     set @idx = charindex(@Delimiter,@String)   
     if @idx!=0   
      set @slice = left(@String,@idx - 1)   
     else   
      set @slice = @String   

     if(len(@slice)>0) 
      insert into @temptable(SplitValue) values(@slice)   

     set @String = right(@String,len(@String) - @idx)   
     if len(@String) = 0 break   
    end  
return  
end 


insert into RPT_Report2court (Reportid, courtnumber) 
select * ,@Court FROM dbo.Split(ReportId,' ') 

Lassen Sie mich wissen, wenn Sie Fragen haben. Danke.

+0

Vielen Dank für die Hilfe. Ich habe zuerst diese Abfrage versucht: Einfügen in RPT_Report2court (Reportid, Gerichtnummer) wählen Sie Cast (Wert AS Int), @Court von String_split (@ReportId, ''); – ppetyr

+0

, aber es ist ein Problem mit der Funktion string_split aufgetreten. Dann habe ich deine Funktion leicht modifiziert und es hat mir bei meinem Problem geholfen. Danke noch einmal. – ppetyr

1

Ich denke, das ist das, was Sie wollen:

insert into RPT_Report2court (Reportid, courtnumber) 
    select cast(value AS int) , @Court 
    from string_split(@ReportId, ' '); 
+0

Ja, ist es, aber als ich versuchte, diese Abfrage auszuführen, stieß ich auf ein Problem mit der "string_split" -Funktion und ich musste meinen eigenen Weg finden, den String-Parameter zu teilen. Wie auch immer, danke für die Hilfe – ppetyr