2013-06-27 4 views
1

Это, вероятно, простой вопрос, но мне нужен акт запуска отчета, чтобы иметь «пред-событие» для запуска хранимой процедуры. Я НЕ возвращаю данные из процедуры, он обновляет 2 таблицы в хранилище данных, выполняя BULK INSERT из CSV-файлов, которые были экспортированы из базы данных ISAM. Сам отчет использует отдельный запрос, чтобы вытащить из таблиц SQL Server, но импортированные данные в конечном счете используются несколькими отчетами, чтобы таблицы фактически обновлялись.Необходимость запуска хранимой процедуры SQL Server в начале отчета ssrs

Хранимая процедура будет выполняться в ночное время как часть обычной процедуры, но данные, влияющие на этот конкретный отчет, будут обновляться пользователями и новый .csv-экстракт, созданный непосредственно перед запуском отчета, поэтому отчет должен запускать сохраненный чтобы обновить таблицы, прежде чем запрашивать эти таблицы.

Я попытался выполнить поиск, но все ссылки, которые я нахожу, сосредоточены на использовании хранимой процедуры в качестве запроса отчета, и это не то, что я пытаюсь выполнить. У меня есть отдельный запрос для вытягивания данных, мне нужно запустить хранимую процедуру в дополнение к предшествующему запросу отчета, если это имеет смысл.

Кто-нибудь знает, как вызвать хранимую процедуру в качестве начальной строки (-ов) моего запроса на отчет?

Заранее благодарим за любые идеи. Я не программист SQL (или какой-либо программист, действительно), поэтому, пожалуйста, будьте достаточно конкретны в своих советах ... концепции высокого уровня, которые предполагают любую существующую базу знаний с моей стороны, вероятно, будут потеряны для меня.

Это хранимая процедура (dbo.KCSI.DataUpdate) я писал, если это помогает ...

--To run as a script (query) the following 2 lines should be un-commented (there are 3 of these 'run-as-a-script' comments to find) 
--USE KCSI 
--Go 

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

-- To run as a script (query) the following 3 lines should all be commented out 
CREATE PROCEDURE DataUpdate 
AS 
BEGIN 

SET NOCOUNT ON 

-- Declare all the needed variables. 
DECLARE @CustFile varchar(255) 
DECLARE @CustFile_Exists int 
DECLARE @HistFile varchar(255) 
DECLARE @HistFile_Exists int 
DECLARE @dt varchar(30) 
DECLARE @NewCustName varchar(250) 
DECLARE @NewHistName varchar(250) 

-- Sets Boolean value for whether or not each file exists, using T-SQL extended (i.e. DOS Shell) command 
SELECT @CustFile='C:\transfer\ecallcust.csv' 
EXEC Master.dbo.xp_fileexist @CustFile, @CustFile_Exists OUT 

SELECT @HistFile='C:\transfer\ecallhist.csv' 
EXEC Master.dbo.xp_fileexist @HistFile, @HistFile_Exists OUT 

-- Sets a date variable to append to the final file name 
SELECT @dt = REPLACE(Convert(varchar(30),getdate(),120),':','_') 
-- Sets a variable to hold the final name. Variable use required because of the hybrid nature of the name (dos shell command + SQL variable) 
SET @NewCustName = 'RENAME C:\transfer\history\ecallcust2.csv "ecallcust_'[email protected]+'.csv"' 
SET @NewHistName = 'RENAME C:\transfer\history\ecallhist2.csv "ecallhist_'[email protected]+'.csv"' 

-- Subroutine runs only if ecallcust.csv is present 
IF @CustFile_Exists = 1 
BEGIN 

--Zaps the table 
TRUNCATE TABLE custextract 
-- Initially renames the file, using T-SQL extended (i.e. DOS Shell) command 
EXEC master.dbo.xp_cmdshell 'RENAME C:\transfer\ecallcust.csv ecallcust2.csv' 

-- Update table from CSV file 
BULK INSERT custextract 
FROM 'c:\transfer\ecallcust2.csv' 
WITH (
ROWTERMINATOR='\n' 
) 

-- Move file to the history directory and rename it to include the date-time stamp using T-SQL extended (i.e. DOS Shell) command 
EXEC master.dbo.xp_cmdshell 'MOVE C:\transfer\ecallcust2.csv C:\transfer\history\' 
EXEC master.dbo.xp_cmdshell @NewCustName 

END 

-- Subroutine runs only if ecallhist.csv is present 
IF @HistFile_Exists = 1 
BEGIN 

--Zaps the table 
TRUNCATE TABLE histextract 
-- Initially renames the file, using T-SQL extended (i.e. DOS Shell) command 
EXEC master.dbo.xp_cmdshell 'RENAME C:\transfer\ecallhist.csv ecallhist2.csv' 

-- Update table from CSV file 
BULK INSERT histextract 
FROM 'c:\transfer\ecallhist2.csv' 
WITH (
ROWTERMINATOR='\n' 
) 

-- Move file to the history directory and rename it to include the date-time stamp using T-SQL extended (i.e. DOS Shell) command 
EXEC master.dbo.xp_cmdshell 'MOVE C:\transfer\ecallhist2.csv C:\transfer\history\' 
EXEC master.dbo.xp_cmdshell @NewHistName 

END 

-- To run as a script (query) the following line should be commented out 
END 
GO 

и запрос отчета ...

WITH OrderedYTD AS 
(
SELECT custextract.*, histextract.*, 
     ROW_NUMBER() OVER (PARTITION BY custextract.custcustno ORDER BY histextract.salesytd desc) AS RowNumber 
FROM custextract 
INNER JOIN histextract 
    ON custextract.custcustno = histextract.histcustno 
WHERE (custextract.ecall = 'Y') 
) 

SELECT OrderedYTD.* 
FROM OrderedYTD 
WHERE RowNumber <= 10; 

ответ

3

Создайте одну хранимую процедуру, который сначала обновляет данные, а затем возвращает обновленные данные, которые должны быть загружены в отчет ...

CREATE PROCEDURE DataSelect 
AS 
BEGIN 

    -- Refresh Data Here 
    EXEC DataUpdate 

    -- Select Data for Report 
    WITH OrderedYTD AS 
    (
     SELECT custextract.*, histextract.*, 
    ROW_NUMBER() OVER (PARTITION BY custextract.custcustno ORDER BY histextract.salesytd desc) AS RowNumber 
     FROM custextract 
     INNER JOIN histextract 
      ON custextract.custcustno = histextract.histcustno 
     WHERE (custextract.ecall = 'Y') 
    ) 

    SELECT OrderedYTD.* 
    FROM OrderedYTD 
    WHERE RowNumber <= 10; 

END 
+0

Отлично! Затем я могу изменить свой отчет, чтобы просто использовать хранимую процедуру вместо того, что он использует сейчас? Это заставит меня воссоздать отчет? Извините за все вопросы, но я, как правило, сетевые технологии внезапно заставили выполнять дизайнерскую работу. После этого мне еще нужно выяснить, как изменить его, чтобы принять входной параметр, который будет поставляться с веб-страницы для фильтрации с помощью «store» и возврата готового отчета в виде динамического .pdf (не сохраненного на диске), который появляется в их браузер, чтобы они могли печатать его локально. Я вытягиваю свои волосы в течение 6 дней подряд ... –

+0

Да, вам нужно будет изменить отчет, чтобы вызвать sp вместо select, но пока новый sp возвращает те же столбцы, что и старый выбор вам не придется делать больше изменений ... Остальные itens должны быть достаточно легкими, чтобы имплантировать тоже, но если вы застряли, тогда просто создайте еще один вопрос ... :) –

+0

Спасибо! Очень сжатые и легко понятные ответы. Я очень ценю помощь! –