Ich möchte die folgende gespeicherte Prozedur zu allen vorhandenen Datenbanken hinzufügen, die die Tabelle schichten
enthalten. Alle meine Ansätze sind gescheitert, deshalb suche ich hier Hilfe.Dynamische gespeicherte Prozedur für alle Datenbanken mit spezifischer Tabelle erstellen
Das ist mein Ansatz:
IF object_id('tempdb.dbo.#database') is not null
drop TABLE #database
GO
CREATE TABLE #database(id INT identity primary key, name sysname)
GO
SET NOCOUNT ON
INSERT INTO #database(name)
SELECT name
FROM sys.databases
WHERE source_database_id is null
ORDER BY name
SELECT * FROM #database
DECLARE @id INT, @cnt INT, @sql NVARCHAR(MAX), @currentDb SYSNAME;
SELECT @id = 1, @cnt = max(id) FROM #database
WHILE @id <= @cnt
BEGIN
BEGIN TRY
SELECT @currentDb = name
FROM #database
WHERE id = @id
IF OBJECT_ID(@currentDb+'.dbo.schichten') IS NOT NULL
CREATE PROCEDURE @currentDb.[dbo].[Ausw_Tabelle_Taxi_Pers_Jahr]
@ColumnName nvarchar(MAX),
@Selector nvarchar(MAX),
@Gesamtergebnis nvarchar(MAX)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sql1 AS NVARCHAR(MAX),
@ASSelector nvarchar(MAX),
@IFPers nvarchar(MAX);
IF @Selector = 'konz'
BEGIN
SET @ASSelector = 'Taxi'
SET @IFPers=''
END
ELSE
BEGIN
SET @ASSelector = 'Personal'
SET @IFPers = '[name] AS Name,'
END
SET @sql1 = N';WITH temp AS (SELECT *
FROM (
SELECT
ISNULL((DATENAME(m,[datum])+ cast(datepart(yyyy,[datum]) as varchar(5))),0) AS MONTHYEAR,
ISNULL(['+ @Selector +'],0) AS '+ @ASSelector +','+ @IFPers +'
ISNULL((ISNULL([umsum],0) +
ISNULL([sonst_0],0) +
ISNULL([sonst_7],0) +
ISNULL([sonst_16],0) +
ISNULL([sonst_z],0) -
ISNULL([ff],0)),0) AS UMSATZSUMME
FROM [dbo].[schichten]
) AS SOURCE
PIVOT (SUM([UMSATZSUMME]) FOR [MONTHYEAR] IN ('+ @ColumnName + N')) AS UMSAETZE)
SELECT *, '+ @Gesamtergebnis +' AS Gesamtergebnis FROM temp ORDER BY '+ @ASSelector +''
EXEC sp_executesql @sql
END
END TRY
BEGIN CATCH
END CATCH
SET @id = @id + 1;
END
GO
Ich hoffe, ich dass es jemanden gibt, der mir helfen kann.