Я хочу подвести итоги из нескольких баз данных. На данный момент у меня есть три базы данных: SPA_PROD
, SPB_PROD
и SPC_PROD
.Суммировать значения из баз данных и параметризовать их. [SQL Server]
Мой SQL-запрос:
IF EXISTS (SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[TESTSUM]')
AND TYPE IN (N'P',N'PC'))
DROP PROCEDURE [dbo].[TESTSUM]
GO
CREATE PROC TESTSUM
AS
BEGIN
DECLARE @dbName SYSNAME,
@ObjectSUM INT,
@d datetime
SET @d = '20141113'
DECLARE @SQL NVARCHAR(MAX)
DECLARE @DBObjectStats TABLE (
--DBName SYSNAME,
DBObjects INT)
DECLARE curAllDBs CURSOR FOR
SELECT name
FROM MASTER.dbo.sysdatabases
WHERE name like '%PROD'
ORDER BY name
OPEN curAllDBs
FETCH curAllDBs INTO @dbName
WHILE (@@FETCH_STATUS = 0) -- db loop
BEGIN
--SQL QUERY
SET @SQL = 'select @dbObjects = sum(doctotal) from ' +
QuoteName(@dbName) + '..Invoice
where DocDate = ''' + cast(@d as varchar(25)) + ''''
PRINT @SQL -- Debugging
EXEC sp_executesql @SQL, N'@dbObjects int output',
@dbObjects = @ObjectSUM output
INSERT @DBObjectStats
SELECT @ObjecSUM
FETCH curAllDBs INTO @dbName
END
CLOSE curAllDBs
DEALLOCATE curAllDBs
-- Return results
SELECT sum(DBObjects) [InvoiceSUM] FROM @DBObjectStats
END
GO
-- Execute stored procedure
EXEC TESTSUM
GO
И эта работа совершенна и дает мне правильную сумму от всех моих DBS:. 120 000 $ (25 000 от SPA_PROD, 95 000 SPC_PROD и 0 (NULL) от SPB_PROD
То, что я хочу сделать:
Я хотел бы параметризуем, что позволяет мне выбрать дату и базы данных Например, я хочу, чтобы выбрать SPA_PROD
и SPB_PROD
с датой 2014-01-0. 1 в другом случае я хочу, чтобы все базы данных (SPA + SPB + SPC
с другой датой.
Возможно ли это? Есть идеи?
Я могу использовать все, что дает мне SQL Server 2012 и T-SQL. Может быть, эта технология предлагает мне самый простой способ сделать это.
Я также использую SAP Crystal Reports для преобразования SQL-вывода в красивый отчет.
Извините за мой английский, и я попытался описать вам свою проблему, насколько мог. Если вам нужна дополнительная информация, которая поможет вам помочь мне -> спросите меня :).