Sql server 使用SQL存储过程的SSRS

Sql server 使用SQL存储过程的SSRS,sql-server,ssrs-2008,Sql Server,Ssrs 2008,我有一个从链接服务器检索数据的存储过程。我可以通过设置单个变量来运行存储过程。结果最终显示在我的SQL 2008 R2数据库中的一个表中。SSRS中的数据集使用EXEC dbo.ImagePlaceholder@Name命令调用此存储过程。以下是存储过程: USE [LagoReporting] GO /****** Object: StoredProcedure [dbo].[ImagePlaceholder] Script Date: 03/27/2013 14:22

我有一个从链接服务器检索数据的存储过程。我可以通过设置单个变量来运行存储过程。结果最终显示在我的SQL 2008 R2数据库中的一个表中。SSRS中的数据集使用EXEC dbo.ImagePlaceholder@Name命令调用此存储过程。以下是存储过程:

     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时包含所有正确的信息,但我不会将数据返回到报告中


提前感谢您的帮助。对于代码格式,很抱歉。

sp的结尾是一个插入查询

insert into dbo.ImagePH 
select * from #ActiveTemp
如果您想让它返回结果,它需要是一个select查询

  • 您应该使用
    sp_executesql
    ,以便将查询作为参数化查询执行
  • 无论如何,这里都不应该使用动态sql
  • 填充临时表是没有意义的。直接插入dbo.ImagePH即可

每次运行报告时,是否要创建表[dbo].[ImagePH]?仅供参考,您不能在SSRSCNRAD中更改数据-非常感谢您的帮助。我将继续清理一些东西,包括直接插入ImagePH表,而不是先插入temp表。如果我这样做了,我还是应该删除表还是应该删除记录?正如@DanAndrews指出的,你为什么要开始创建ImagePH?您可以只选择记录,然后甚至不必插入其中。但是,如果你要做代码>删除*IMAFE/<代码> VS>代码> DealStable IMAFE.<代码>,那么你可能应该考虑<代码>截断< /代码>而不是删除。我编辑了程序,删除了ImagePH表,只使用了temp表。它更快更干净。谢谢你的帮助。