이것은 아마도 간단한 질문 일 수 있지만 저장 프로 시저를 트리거하는 "사전 이벤트"가있는 보고서를 실행해야합니다. 프로 시저에서 데이터를 반환하지 않고 ISAM 데이터베이스에서 내 보낸 .csv 파일에서 BULK INSERT를 수행하여 데이터웨어 하우스에서 2 개의 테이블을 업데이트합니다. 보고서 자체는 별도의 쿼리를 사용하여 SQL Server 테이블에서 가져 오지만 가져온 데이터는 여러 보고서에서 궁극적으로 사용되므로 테이블을 실제로 업데이트해야합니다.ssrs 보고서 시작시 SQL Server 저장 프로 시저를 트리거해야 함
저장 프로 시저는 일반 루틴의 일부로 밤에 실행되지만이 특정 보고서에 영향을주는 데이터는 사용자가 업데이트하고 보고서를 실행하기 직전에 생성 된 새로운 .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;
우수! 그런 다음 지금 사용하는 쿼리 대신 저장 프로 시저 만 사용하도록 보고서를 변경할 수 있습니까? 윌슨이 보고서를 다시 만들게할까요? 모든 질문에 대해 유감스럽게 생각하지만 일반적으로 갑자기 디자이너 업무를 수행하는 네트워크 기술자입니다. 이 후에도 웹 페이지에서 제공하는 입력 매개 변수를 "저장"하여 필터링하고 완성 된 보고서를 동적 .pdf (디스크에 저장되지 않음)로 반환하는 입력 매개 변수를 허용하도록 수정하는 방법을 알아 내야합니다 그들의 브라우저에서 로컬로 인쇄 할 수 있습니다. 나는 지금까지 6 일간 내 머리카락을 꺼내왔다. –
예, select 대신 sp를 호출하도록 보고서를 변경해야하지만 새 sp가 낡은 선택을하면 더 많은 변경 작업을 수행 할 필요가 없습니다. 다른 itens는 너무 쉽게 구현해야합니다. 그렇지만 다른 문제를 만들면 ... :) –
감사합니다! 매우 간결하고 쉽게 이해할 수있는 답. 정말 도움을 주셔서 감사합니다! –