2013-03-27 8 views
2

У меня есть хранимая процедура, которая извлекает данные со связанного сервера. Я могу запустить хранимую процедуру, установив единственную переменную. Результаты приводятся в таблице в моей базе данных SQL 2008 R2. Набор данных в SSRS вызывает эту хранимую процедуру с помощью команды EXEC dbo.ImagePlaceholder @Name. Вот хранимая процедура:SSRS с использованием хранимой процедуры SQL

 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

Каждый раз, когда отчет запускается, вы хотите создать таблицу [dbo]. [ImagePH]? FYI, вы не можете изменить данные в SSRS – SQLMason

ответ

1

Конец вашего зр является вставка запроса

insert into dbo.ImagePH 
select * from #ActiveTemp 

Если вы хотите, чтобы он дал результаты его необходимо будет запрос на выборку

Также

  • Вы должны использовать sp_executesql поэтому вы выполняете свой запрос в качестве параметризованного запроса.
  • Вы не должны использовать динамический sql здесь, во всяком случае
  • Нет смысла заполнять временную таблицу. Просто вставьте в dbo.ImagePH напрямую.
+0

Conrad - Большое спасибо за помощь. Я собираюсь очистить некоторые вещи вперед, в том числе вставляя их непосредственно в таблицу ImagePH, а не сначала вставляя в таблицу temp. Если я это сделаю, я все равно оставлю стол или просто удалю записи? –

+0

Ну как @DanAndrews указывает, почему вы создаете ImagePH для начала? Вы можете просто выбрать записи, а затем вам даже не нужно вставлять их. Однако, если вы собираетесь делать «DELETE * ImagePH» и «DROP table ImagePH», вам следует, скорее всего, рассмотреть «TRUNCATE» вместо удаления. [Подробнее см.] (Http://dba.stackexchange.com/a/7677/196) –

+0

Я отредактировал процедуру и исключил таблицу ImagePH и просто использовал временную таблицу. Это быстрее и чище. Спасибо за вашу помощь. –

Смежные вопросы