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