2013-03-27 34 views
2

我有一個從鏈接服務器檢索數據的存儲過程。我可以通過設置單個變量來運行存儲過程。結果以SQL 2008 R2數據庫中的表格結尾。 SSRS中的數據集使用EXEC dbo.ImagePlaceholder @Name命令調用此存儲過程。這裏是存儲過程:使用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 

雖然當我查詢數據庫dbo.ImagePH擁有所有正確的信息,我沒有得到的數據發回的報道。

在此先感謝您的幫助。對於代碼格式抱歉。

+0

每次運行報告時,都要創建Table [dbo]。[ImagePH]?僅供參考,您無法更改SSRS中的數據 – SQLMason 2013-03-27 19:39:38

回答

1

您的SP的結束是一個插入查詢

insert into dbo.ImagePH 
select * from #ActiveTemp 

如果你希望它返回結果其將需要選擇查詢

而且

  • 您應該使用sp_executesql所以你執行你的查詢作爲參數化查詢。
  • 您不應該在這裏使用動態sql
  • 填充臨時表是沒有意義的。只需直接插入dbo.ImagePH即可。
+0

康拉德 - 非常感謝您的幫助。我將繼續清理一些事情,包括直接插入ImagePH表格,而不是先插入臨時表格。如果我這樣做,我仍然放棄表或者我應該刪除記錄? – 2013-03-27 21:11:36

+0

那麼@DanAndrews指出你爲什麼要創建ImagePH?你可以選擇記錄,然後你甚至不必插入它。但是,如果你打算做'刪除* ImagePH'與'DROP table ImagePH',那麼你應該考慮'TRUNCATE'而不是刪除。 [更多參見](http://dba.stackexchange.com/a/7677/196) – 2013-03-27 21:15:42

+0

我編輯了程序並刪除了ImagePH表,並使用了臨時表。它更快,更乾淨。感謝你的幫助。 – 2013-03-29 02:17:21