Artikel mit ‘while’ getagged

MS SQL gespeicherte Prozedur Array while loop schleife

Montag, 08. Februar 2010

Ich hatte das vergnügen ein wenig mit den „gespeicherten Prozeduren“ vom MS Sql-Server zu spielen ;)

Hier mal ein Beispiel Scenario:
Aufgabe war es aus einem Text mit Simicolon getrennten Werten, jeden einzelt in eine Tabelle zu schreiben.

Also als eingangs Parameter haben wir die Variable @temp_ID

@temp_ID hat den Wert: 1423,5895,4578,2248

Gelöst habe ich das so:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
USE [master]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 
CREATE PROCEDURE [dbo].[sp_test_insert]
	-- Add the parameters for the stored procedure here
	@temp_ID varchar(8000)
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
 
    	-- Insert statements for procedure here   
 
	DECLARE @ID varchar(10), @Pos int
 
	SET @temp_ID = LTRIM(RTRIM(@temp_ID))+ ','
	SET @Pos = CHARINDEX(',', @ temp_ID, 1)
 
	IF REPLACE(@temp_ID, ',', '') <> ''
	BEGIN
	    WHILE @Pos > 0
	    BEGIN
                SET @ID = LTRIM(RTRIM(LEFT(@temp_ID, @Pos - 1)))
 
		IF @ID <> ''
		BEGIN
		    INSERT INTO Table1 ([ID]) VALUES (@ID)
 
		END -- IF @ID <> ''
 
		SET @ temp_ID = RIGHT(@temp_ID, LEN(@temp_ID) - @Pos)
		SET @Pos = CHARINDEX(',', @ temp_ID, 1)
 
	    END -- WHILE @Pos > 0
 
	END	-- IF REPLACE(@temp_ID, ',', '') <> ''
 
END