からテーブルにデータを挿入する私は、このスクリプトを実行しようとしています:は、動的SQLスクリプト
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)
しかし、私は構文エラーを取得しています。
私は@SQL変数を出力しており、生成されたコードは良く見えます。私はここで本当に簡単なものを逃していますか?または私が達成したいものを私の方法でオフですか?
私が達成したいのは、最初の選択で参照された各DBを通過して値を取得し、それらをテーブルに挿入するスクリプトです。
私が助けてくれる情報がもう必要であれば教えてください。この時点で助けていただければ幸いです。
エラーは何ですか?実行時に '@ SQL'の中にあるものは何ですか? –
私が元々持っていたエラーは、値を入れてからselectを使っていたからです。私は値を削除し、私はハニーバジャーが私に指摘した問題に直面しました。私は今、単語の近くに間違った構文を取得しています。私は今これを反映するために私の質問を更新します。多くのありがとう、Dave – Dave
これはどのRDBMSですか? 'mysql'、' postgresql'、 'sql-server'、' oracle'、 'db2'のどれかを指定するタグを追加してください。 –