Ich versuche, dieses Skript auszuführen:Einfügen von Daten in eine Tabelle aus einem dynamischen SQL-Skript
DECLARE @Client VARCHAR(50)
DECLARE @SQL VARCHAR(MAX)
DECLARE @DBReporting VARCHAR(500)
DECLARE @DBSignet VARCHAR(500)
DECLARE @databasename varchar(100)
SET @SQL = ''
DECLARE db_cursor CURSOR FOR
SELECT name
FROM sys.databases
WHERE name like '%reporting%'
AND NOT Name Like '%UAT%'
AND NOT Name Like '%Test%'
AND NOT Name Like '%Demo%'
AND NOT Name like '%staging%'
AND NOT Name like '%server%'
AND state_desc <> 'offline'
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @databasename
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Client = REPLACE(REPLACE(@databasename, 'SourcingPlatform_', ''), '_Reporting', '')
SET @DBSignet = 'SourcingPlatform_' + @Client + '_Signet_Tradeflow'
SET @DBReporting = 'SourcingPlatform_' + @Client + '_Reporting'
SET @SQL = @SQL + 'INSERT INTO STS_Branding.[dbo].[S2C_KeyStats]
([Project]
,[DataDate]
,[EventTypeName]
,[CountOfAllEvents]
,[CreatedWithinLast3Months]
,[CreatedWithinLast6Months]
,[CreatedWithinLast12Months])
VALUES
SELECT ''' + @Client + ''' AS Client, convert(date, getdate()), EventTypeName collate Latin1_General_CI_AS,
count(id) as CountOfAllEvents,
(select COUNT(e3.ID)
from ' + @DBReporting + '..REPORTS_Sourcing_Event E3
where DATEDIFF(month,CreateDate, GETDATE()) <= 3
and E.EventTypeName = E3.EventTypeName) as CreatedLast3Months,
(select COUNT(e6.ID)
from ' + @DBReporting + '..REPORTS_Sourcing_Event E6
where DATEDIFF(month,CreateDate, GETDATE()) > 3
and DATEDIFF(month,CreateDate, GETDATE()) <= 6
and E.EventTypeName = E6.EventTypeName) as CreatedLast6Months,
(select COUNT(e12.ID)
from ' + @DBReporting + '..REPORTS_Sourcing_Event E12
where DATEDIFF(month,CreateDate, GETDATE()) > 6
and DATEDIFF(month,CreateDate, GETDATE()) <= 12
and E.EventTypeName = E12.EventTypeName) as CreatedLast12Months,
(select COUNT(e13.ID)
from ' + @DBReporting + '..REPORTS_Sourcing_Event E13
where DATEDIFF(month,CreateDate, GETDATE()) > 12
and E.EventTypeName = E13.EventTypeName) as CreatedOver12Months
FROM ' + @DBReporting + '..REPORTS_Sourcing_Event E
Group By EventTypeName
UNION '
FETCH NEXT FROM db_cursor INTO @databasename
END
CLOSE db_cursor
DEALLOCATE db_cursor
SET @sql = substring(@sql, 0, LEN(@sql) - len('UNION ')) + ' ORDER BY Client, EventTypeName collate Latin1_General_CI_AS'
--PRINT @SQL
exec(@SQL)
Ich bin jedoch einen Syntaxfehler zu bekommen.
Ich habe die Variable @SQL ausgedruckt und der generierte Code sieht gut aus. Fehle ich hier etwas wirklich Einfaches? oder bin ich weit weg von dem, was ich erreichen möchte?
Was ich erreichen möchte, ist ein Skript, das durch jeden DB geht, auf den in der ersten Auswahl verwiesen wird und die Werte erhält und sie in meine Tabelle einfügt.
Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen, um mir zu helfen, würde jede Hilfe an dieser Stelle sehr geschätzt werden.
Was ist der Fehler? Was ist im '@ SQL' zum Zeitpunkt der Ausführung? –
Der Fehler, den ich ursprünglich hatte, war, weil ich Werte gesetzt hatte und dann direkt danach wählte. Ich entfernte die Werte und ich wurde dann mit dem Thema konfrontiert, auf das Honigdachs mich hinwies. Ich bekomme jetzt eine falsche Syntax in der Nähe des Wortes von. Ich werde meine Frage aktualisieren, um dies jetzt zu reflektieren. Vielen Dank, Dave – Dave
Für welches RDBMS ist das gedacht? Bitte fügen Sie ein Tag hinzu, um anzugeben, ob Sie 'mysql',' postgresql', 'sql-server',' oracle' oder 'db2' verwenden - oder etwas ganz anderes. –