2013-03-27 2 views
2

연결된 서버에서 데이터를 검색하는 저장 프로 시저가 있습니다. 단일 변수를 설정하여 저장 프로 시저를 실행할 수 있습니다. 결과는 SQL 2008 R2 데이터베이스의 테이블에 저장됩니다. SSRS의 데이터 집합은 EXEC dbo.ImagePlaceholder @Name 명령을 사용하여이 저장 프로 시저를 호출합니다. 내가 dbo.ImagePH 올바른 정보를 모두 가지고 데이터베이스를 쿼리 할 때 비록 내가 다시 보고서에 데이터를 받고 있지 않다SQL 저장 프로 시저를 사용하는 SSRS

 USE [LagoReporting] 


GO 
/****** Object: StoredProcedure [dbo].[ImagePlaceholder] Script Date: 03/27/2013 14:22:21 ******/ 
    SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
-- ============================================= 
-- Author:Tim Vavra 
-- Create date: 3/27/13 
-- Description: Stored procedure to create the table necessary to produce a report that shows all images that are listed 
-- as placeholders in Lago. Included in table will be any job which has a street date greater than today - 30. 
-- ============================================= 


ALTER PROCEDURE [dbo].[ImagePlaceholder] 
(
@Name varchar(80) 
) 
AS 
BEGIN 

    SET NOCOUNT ON; 
    SET FMTONLY OFF; 


declare @SQL nvarchar(4000) 
declare @KATBEZC varchar(80) 

drop table dbo.ImagePH 

set @KATBEZC = @Name  

Create Table #ActiveTemp(
    media nvarchar(max), 
    div nvarchar(max), 
    folio nvarchar(max), 
    pgblock nvarchar(max), 
    item nvarchar(max), 
    itemname nvarchar(max), 
    photoinstruction nvarchar(max), 
    photodirection nvarchar(max), 
    PH nvarchar(100), 
    imagename nvarchar(max)) 

Create Table [dbo].[ImagePH](
    media nvarchar(max), 
    div nvarchar(max), 
    folio nvarchar(max), 
    pgblock nvarchar(max), 
    item nvarchar(max), 
    itemname nvarchar(max), 
    photoinstruction nvarchar(max), 
    photodirection nvarchar(max), 
    PH nvarchar(100), 
    imagename nvarchar(max)) 

     set @SQL= 
     N'insert into #ActiveTemp 
     select media, div,folio,pgblock,item, itemname, photoinstruction, photodirection,PH,imagename 
     from OPENQUERY(LAGO, 
     ''SELECT DISTINCT KATBEZC media, 
art.artvf1c div, 
CONCAT(pagprec,pagpags) folio, 
pro.probezc pgblock, 
art.artvf2c item, 
art.artbezc itemname, 
art.artvf7c photoinstruction, 
art.artvf6c photodirection, 
bld.bldtmps PH, 
bld.bldfnmc ImageName 
FROM dok, 
pro, 
art, 
aez, 
kat, 
PAG, 
kav, 
kom, 
bld, 
boz 
WHERE kavkatkeyi = katkeyi 
AND artkavkeyi = kavkeyi 
AND aezartkeyi = artkeyi 
AND aezkavkeyi = artkavkeyi 
AND prokeyi = aezprokeyi 
AND prokavkeyi = aezkavkeyi 
AND komprokeyi = prokeyi 
AND (komkavkeyi = 0 OR komkavkeyi = prokavkeyi) 
AND dokkeyi = komdokkeyi 
AND (prosnei = doksnli OR prosnei = doksnei) 
AND dokkeyi = pagdokkeyi 
AND PAGPAVKEYI = KATPAVKEYI 
and bldtmps = 1 
and bozbldkeyi = bldkeyi 
and bozobjkeyi = artkeyi 
and katbezc = ''''' + @Name + ''''' 
and boztyps = 2 
Group by kat.katbezc, 
CONCAT(pagprec,pagpags), 
art.artvf1c, 
pro.probezc, 
art.artvf2c, 
art.artbezc, 
kom.kombezc, 
art.artvf7c, 
art.artvf6c, 
bld.bldtmps, 
bld.bldfnmc 
'')' 

    exec (@SQL) 

    insert into dbo.ImagePH 
    select * from #ActiveTemp 

END 

다음은 저장 프로 시저입니다.

미리 도움을 청하십시오. 죄송합니다 코드 형식.

+0

보고서가 실행될 때마다 [dbo] 테이블을 만들려고합니다. [ImagePH]? 참고하시기 바랍니다. SSRS에서 데이터를 변경할 수 없습니다. – SQLMason

답변

1

하여 SP의 끝은 당신이

  • 당신은 sp_executesql를 사용해야합니다 그것의 선택 쿼리를 또한

    할 필요가 결과를 반환하려면 삽입 쿼리

    insert into dbo.ImagePH 
    select * from #ActiveTemp 
    

    입니다 쿼리를 매개 변수화 된 쿼리로 실행합니다.

  • 여기에 동적 SQL을 사용하면 안됩니다.
  • 임시 테이블을 채우는 것은 의미가 없습니다. dbo.ImagePH에 직접 삽입하면됩니다.
+0

Conrad - 도움을 많이 주셔서 감사합니다. 임시 테이블에 먼저 삽입하는 대신 ImagePH 테이블에 직접 삽입하는 것을 포함하여 앞으로 몇 가지를 정리할 것입니다. 그럴 경우 테이블을 삭제하거나 레코드를 삭제해야합니까? –

+0

@DanAndrews는 왜 ImagePH를 처음으로 만들지를 지적합니다. 레코드를 선택하면 레코드를 삽입 할 필요가 없습니다. 그러나'DELETE * ImagePH'와'DROP table ImagePH'를 비교한다면 삭제 대신에'TRUNCATE'를 고려해야합니다. [더 자세히보기] (http://dba.stackexchange.com/a/7677/196) –

+0

나는 프로 시저를 편집하고 ImagePH 테이블을 제거하고 단지 임시 테이블을 사용했습니다. 더 빠르고 깨끗합니다. 모든 도움에 감사드립니다. –

관련 문제