Gespeicherte Prozedur

10/12/2010 - 14:31 von Andreas Vogt | Report spam
Hallo NG,
ich habe in mehreren Tabellen das gleiche Feld Status und möchte nun mit 1
SP den Status auslesen anstatt für jede DB eine SP zu erstellen.
Bei unterer SP erhalte ich den Fehler dass Tabelle nicht deklariert ist.
Kann mir mal jemand helfen? Danke.

Gruß Andreas

Meine SP:
USE [injektormontage]
GO
/****** Object: StoredProcedure [dbo].[getStatus] Script Date:
12/10/2010 14:01:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
@Status int OUTPUT,
@Gehaeusenr float,
@Ident float,
@IdentFeld nvarchar(50),
@Tabelle nvarchar(50)
AS
SET NOCOUNT ON

SELECT TOP 1
@status = Status
FROM @Tabelle
WHERE @IdentFeld = @Ident

SET NOCOUNT OFF
GO
 

Lesen sie die antworten

#1 Lutz Uhlmann
10/12/2010 - 17:02 | Warnen spam
Du mußt dynamisches SQL verwenden wenn du den Tabellennamen als
Parameter angeben willst und dieses per sp_executesql ausführen.

USE [injektormontage]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROC dbo.getStatus
@Status int OUTPUT,
@Gehaeusenr float,
@Ident float,
@IdentFeld nvarchar(50),
@Tabelle nvarchar(50)
AS
BEGIN
DECLARE @sql_stmt NVARCHAR(255);

SET NOCOUNT ON

SET @sql_stmt = N'SELECT TOP 1 @tmp=Status FROM ' + @Tabelle +
N' WHERE ' + @IdentFeld + N' = ' +
CAST(@Ident AS NVARCHAR(20))
EXEC sp_executesql @sql_stmt, N' @tmp int output', @Status OUTPUT

SET NOCOUNT OFF
END
GO

Aber du mußt aufpassen bei der Konvertierung des FLOAT-Parameters in den
SQL-Text ... da könnte es evtl Probleme geben!

Ähnliche fragen