Eintrag kopieren mit Strored Procedure

30/07/2009 - 12:55 von andi rickenbach | Report spam
Hallo, ich möchte mit SQL Server 2005 mit einer Stored Procedure einen
Eintrag kopieren. Mit der nachfolgenden Stored Procedure bzw. dem Aufruf von
"copy_test 1, 2" wird der Eintrag mit myID=1 kopiert bzw. einen neuen
erstellt mit der myID=2 und alle Daten "test1, test2, test3" kopiert. Gibt es
da ev. eine elegantere Lösung? Vorallem bezüglich den Spalten test1, test2
usw. Gibt es da eine Möglichkeit alle Spalten zu kopieren, ohne test1, test2
usw anzugeben? Diese Frage kommt weil ev. eine Spalte test4, test5 oder noch
mehr dazukommen und ich möchte nicht jeweils die SP anpassen. Es sollen
einfach alle Spalten bis auf die ID kopiert werden.

Vielen Dank für eure Tipps.

USE [myDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[copy_test]
(@myID [int], @myNewID [int])
AS BEGIN
DECLARE @rowcount_var int;
DECLARE @myID1 int;
DECLARE @test1 varchar(50);
DECLARE @test2 varchar(50);
DECLARE @test3 varchar(50);

SELECT * FROM T_CopyTest WHERE myID=@myID;
SELECT @rowcount_var = @@ROWCOUNT
IF @rowcount_var = 1
BEGIN
DECLARE CopyTest_Cursor CURSOR FOR
SELECT * FROM T_CopyTest WHERE myID=@myID;
OPEN CopyTest_Cursor FETCH NEXT FROM CopyTest_Cursor INTO @myID1,
@test1, @test2, @test3; Insert T_CopyTest (myID, test1, test2, test3)
Values (@myNewID, @test1, @test2, @test3);
CLOSE CopyTest_Cursor DEALLOCATE CopyTest_Cursor
END
END
 

Lesen sie die antworten

#1 Christoph Ingenhaag
30/07/2009 - 13:20 | Warnen spam
"andi rickenbach" wrote:

Hallo, ich möchte mit SQL Server 2005 mit einer Stored Procedure einen
Eintrag kopieren. Mit der nachfolgenden Stored Procedure bzw. dem Aufruf von
"copy_test 1, 2" wird der Eintrag mit myID=1 kopiert bzw. einen neuen
erstellt mit der myID=2 und alle Daten "test1, test2, test3" kopiert. Gibt es
da ev. eine elegantere Lösung? Vorallem bezüglich den Spalten test1, test2
usw. Gibt es da eine Möglichkeit alle Spalten zu kopieren, ohne test1, test2
usw anzugeben? Diese Frage kommt weil ev. eine Spalte test4, test5 oder noch
mehr dazukommen und ich möchte nicht jeweils die SP anpassen. Es sollen
einfach alle Spalten bis auf die ID kopiert werden.

Vielen Dank für eure Tipps.

USE [myDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[copy_test]
(@myID [int], @myNewID [int])
AS BEGIN
DECLARE @rowcount_var int;
DECLARE @myID1 int;
DECLARE @test1 varchar(50);
DECLARE @test2 varchar(50);
DECLARE @test3 varchar(50);

SELECT * FROM T_CopyTest WHERE myID=@myID;
SELECT @rowcount_var = @@ROWCOUNT
IF @rowcount_var = 1
BEGIN
DECLARE CopyTest_Cursor CURSOR FOR
SELECT * FROM T_CopyTest WHERE myID=@myID;
OPEN CopyTest_Cursor FETCH NEXT FROM CopyTest_Cursor INTO @myID1,
@test1, @test2, @test3; Insert T_CopyTest (myID, test1, test2, test3)
Values (@myNewID, @test1, @test2, @test3);
CLOSE CopyTest_Cursor DEALLOCATE CopyTest_Cursor
END
END





Tausch mal alles zwischen begin und end hiermit aus

insert into T_CopyTest(myID, test1, test2, test3)
select @myNewID, test1, test2, test3 from T_CopyTest where myID=@myID

VG
Christoph

Ähnliche fragen