テーブルschichten
を含む既存のすべてのデータベースに次のストアドプロシージャを追加します。私のアプローチはすべて失敗したので、私はここで助けを求めています。特定のテーブルを持つすべてのデータベースの動的ストアドプロシージャの作成
これは私のアプローチです:
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
私は私を助けることができる誰かがあることを期待しています。