Это, вероятно, простой вопрос, но мне нужен акт запуска отчета, чтобы иметь «пред-событие» для запуска хранимой процедуры. Я НЕ возвращаю данные из процедуры, он обновляет 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;
Отлично! Затем я могу изменить свой отчет, чтобы просто использовать хранимую процедуру вместо того, что он использует сейчас? Это заставит меня воссоздать отчет? Извините за все вопросы, но я, как правило, сетевые технологии внезапно заставили выполнять дизайнерскую работу. После этого мне еще нужно выяснить, как изменить его, чтобы принять входной параметр, который будет поставляться с веб-страницы для фильтрации с помощью «store» и возврата готового отчета в виде динамического .pdf (не сохраненного на диске), который появляется в их браузер, чтобы они могли печатать его локально. Я вытягиваю свои волосы в течение 6 дней подряд ... –
Да, вам нужно будет изменить отчет, чтобы вызвать sp вместо select, но пока новый sp возвращает те же столбцы, что и старый выбор вам не придется делать больше изменений ... Остальные itens должны быть достаточно легкими, чтобы имплантировать тоже, но если вы застряли, тогда просто создайте еще один вопрос ... :) –
Спасибо! Очень сжатые и легко понятные ответы. Я очень ценю помощь! –