Quantcast
Channel: Für Entwickler: SQL Server Forum
Viewing all articles
Browse latest Browse all 1772

Nur Funktionen und einige erweiterte gespeicherte Prozeduren können innerhalb einer Funktion ausgeführt werden.

$
0
0

Hallo,

ich bekomme von einem Kunden 2 Tabellen. In der einen sind Feiertage definiert und die Regionen in denen sie gültig sind.
Pro Region gibt es eine Spalte, deren Name aus einem Kürzel besteht.
In der zweiten Tabelle ist diesen Kürzeln die Regionsbezeichnung zugeordnet.

Die erste Tabelle möchte der Kunder erweiterbar haben, falls zusätzliche Regionen eingetragen werden sollen.
Ich habe nun ein Script gebaut, das eine 2-spaltige Liste der Feiertage mit den jeweils gültigen Regionen ausgibt.

Dieses Script habe ich als Funktion gespeichert. Wenn ich die Funktion benutze will, bekomme ich die folgende Fehlermeldung:

Nur Funktionen und einige erweiterte gespeicherte Prozeduren können innerhalb einer Funktion ausgeführt werden.

Das ist mein Script:

ALTER FUNCTION [dbo].[F_Feiertage_DE]()

RETURNS @Feiertage TABLE (
Feiertag			nvarchar(100),
Region			nvarchar(100)
)
AS
Begin
DECLARE @strSQL			nvarchar(2000)
DECLARE @FN			nvarchar(255)
DECLARE @ParmDefinition		nvarchar(500)
DECLARE @Feiertagsname		nvarchar(100)
DECLARE @FName		nvarchar(100)
DECLARE @Region			nvarchar(100)
DECLARE @Reg			nvarchar(100)

SET @strSQL = N'DECLARE Colnames CURSOR READ_ONLY FAST_FORWARD FOR SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = ''Feiertage'' AND DATA_TYPE = ''bit'')'
EXEC sp_executesql @strSQL
		OPEN Colnames;
		FETCH NEXT FROM Colnames
		INTO @FN;
		WHILE @@FETCH_STATUS = 0
			BEGIN
			Set @FName = NULL
			Set @strSQL = N'SELECT @Feiertagsname = [Feiertagsname], @Region = [Regionsname] FROM Feiertage, Region WHERE ' + @FN + ' = 1 AND LKZ = ''D'' AND Regionskuerzel = ''' + @FN + ''''
			Set @ParmDefinition = N'@Feiertagsname nvarchar(100) OUTPUT, 
									@Region nvarchar(100) OUTPUT'
			EXEC sp_executesql @strSQL, @ParmDefinition, @Feiertagsname = @FName OUTPUT, @Region = @Reg OUTPUT
			IF @FName IS NOT NULL
				BEGIN
				INSERT INTO  @Feiertage (Feiertag, Region) VALUES (@FName, @Reg)
			END
			FETCH NEXT FROM Colnames
			INTO @FN;
			END
		CLOSE Colnames;
		DEALLOCATE Colnames;
		Return;
END

Liegt das Problem beim dynamischen SQL?
Wie kann ich das Problem umgehen?

Bin für jeden Tipp dankbar

Gruß

cheapy



Viewing all articles
Browse latest Browse all 1772

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>