2015-05-22 2 views
1

Привет, у меня есть несколько BannerID, которые мне нужны для параметра в хранимой процедуре. Я хотел бы пройти через хранимую процедуру, изменив BannerID im, проходящий в качестве параметра. Вот мой код,Цитирование через хранимую процедуру с различными значениями

create table #a 
     (BannerID int, 
     BannerName varchar(100)NULL, 
     InterActionRate Decimal(5,3) NULL 
     )   

Declare @Banker int 
Set @Banker = 0 

insert into #a(BannerID) 
Values (21212),(21577) 

WHILE (@Banker > 2) 
BEGIN 

Insert Into #a(BannerName,InteractionRate) 
Exec BannerSummaryReport @BannerID=BannerID,@DateStart = N'05/01/15',@DateEnd = N'05/20/15' 
Set @Banker = @Banker +1 
END 
Select * from #a 

Я получаю ошибку:

Msg 8114, Level 16, State 5, процедура BannerSummaryReport, линия 0 Ошибки преобразования типа данных NVARCHAR в целом. Ошибка пробивается так, как если бы она была вызвана более двух раз, и я никогда не получаю Выполнение запроса. ЕСЛИ это помогает. Есть идеи?

Редактировать: Я добавил переменную под названием @Banker, которую я использую в качестве счетчика для моего цикла while. Это делает так, что цикл заканчивается. Но моя хранимая процедура все еще не заполняет данные, IE BannerName и InteractionRate все еще имеют нулевое значение в таблице.

Как некоторые просили хранимую процедуру проблема, я не могу получить доступ к нему, я могу дать вам пример вывода, хотя,

Exec BannerSummaryReport @ BannerID = 21212, @ DateStart = N'05/01/15 »@ DateEnd = N'05/20/15'

получить список Гуго пунктов

ReportID BannerName TagName CompanyName BannerStatusID BannerID Impressions FlashImpressions NoScriptImpressions UniqueViers TotalInterActions WebCT ListingCT ListingClickThrough TotalCT InterActionRate ClickThroughRate InterActionDiff ClickThroughDiff ActiveBanners DataSort1 DataSort2 RollOverCount RollOverTime ListingVideoPlayCount ListingVideoPlayTime ListingEmailDealer ListingEmailFriend ClickSortItem1 ClickSortItem2 ClickSortMenu ClickLogo ClickMap ClickWebSite DateAdded PercentagePlayed TagVideoPlayCount TagVideoPlayTime TagVideoTwitter ListingVideoTwitter TagVideoFacebook ListingVideoFacebook TagVideoPinterest ListingVideoPinterest ListingThumbnail ListingScroll TagVideoPlayButtonCount UpdateFilterButtonClick ClickTopSheetExtendImage AccountID ModelSelectClick TrimSelectClick ExteriorColorSelectClick InteriorColorSelectClick InventoryViewClick ShareButtonClick ZipCodeEntered MapClickThrough MenuOpen SummaryClick Misellaneous BannerType VPaidPreRollTime VPaidPreRollCount Mids Ends CreativeIsTrackable CreativeWasViewable 
1 JimmyEllisDemo All DO NOT TOUCH 1 21212 10932905 906549 0 0 11385 63 13 0 0 0.10414 0.00058 NULL NULL 0 Make Model 11291 128193472 14 163846 0 0 1 0 2 0 0 63 2012-01-13 0 7328 48262968 0 0 0 0 0 0 0 0 1 0 0 666 0 0 0 0 0 0 0 0 0 0 0 1 0 0 NULL NULL NULL NULL 
+3

Мое первое предположение, что '@ DateStart' и/или' @ DateEnd' объявлены как целочисленные параметры, а не строковые параметры. Ваше состояние 'while' выглядит так, будто оно никогда не закончится, но это другое дело. –

+0

Для меня кажется, что ваш 'WHILE' никогда не закончится – Lamak

+0

@Gordon Linoff и Lamak. Привет, ребята, я отредактировал запрос, чтобы он дольше не кончался, и только одна проблема решена! – vmedhe2

ответ

1

очевидно, у вас есть ошибка в вашем коде. Я могу воспроизвести ошибку:

create procedure spTest @i int 
as 
Select @i as i 
go 

exec spTest @i = blabla 

Ошибка:

Error converting data type nvarchar to int.

Теперь посмотрим на код:

Exec BannerSummaryReport @BannerID=BannerID,@DateStart = N'05/01/15',@DateEnd = N'05/20/15' 

Что такое @BannerID=BannerID? Вы не передаете значение int параметру int хранимой процедуры. Вы передаете слово BannerID.

EDIT:

Я предполагаю, что вы хотите перебрать все строки в таблице #a и обновить BannerName и InterActionRate столбцов с данными, возвращенных из хранимой процедуры для конкретной строки. К сожалению, нет прямого пути.

Вам необходимо объявить еще одну временную таблицу, в которой будут храниться все столбцы, хранящиеся в том же порядке. То есть

create table #a 
(
BannerID int, 
BannerName varchar(100) NULL, 
InterActionRate int NULL 
)   

insert into #a(BannerID) 
Values (21212),(21577) 

create table #tmp 
(
ReportID 
BannerName 
TagName 
CompanyName 
BannerStatusID 
BannerID 
Impressions 
FlashImpressions 
NoScriptImpressions 
UniqueViers 
TotalInterActions 
WebCT 
ListingCT 
ListingClickThrough 
TotalCT 
InterActionRate 
ClickThroughRate 
InterActionDiff 
ClickThroughDiff 
ActiveBanners 
DataSort1 
DataSort2 
RollOverCount 
RollOverTime 
ListingVideoPlayCount 
ListingVideoPlayTime 
ListingEmailDealer 
ListingEmailFriend 
ClickSortItem1 
ClickSortItem2 
ClickSortMenu 
ClickLogo 
ClickMap 
ClickWebSite 
DateAdded 
PercentagePlayed 
TagVideoPlayCount 
TagVideoPlayTime 
TagVideoTwitter 
ListingVideoTwitter 
TagVideoFacebook 
ListingVideoFacebook 
TagVideoPinterest 
ListingVideoPinterest 
ListingThumbnail 
ListingScroll 
TagVideoPlayButtonCount 
UpdateFilterButtonClick 
ClickTopSheetExtendImage 
AccountID 
ModelSelectClick 
TrimSelectClick 
ExteriorColorSelectClick 
InteriorColorSelectClick 
InventoryViewClick 
ShareButtonClick 
ZipCodeEntered 
MapClickThrough 
MenuOpen 
SummaryClick 
Misellaneous 
BannerType 
VPaidPreRollTime 
VPaidPreRollCount 
Mids 
Ends 
CreativeIsTrackable 
CreativeWasViewable 
) 

Дайте этим колонкам соответствующие типы.

Далее вам потребуется курсор для перебора строк в таблице #a:

Declare @BannerID int 

declare cur cursor fast_forward for 
select BannerID from #a 

open cur 

fetch next from cur into @BannerID 

while @@FETCH_STATUS = 0 
begin 

insert into #tmp 
exec spTest @BannerID 

fetch next from cur into @BannerID 
end 

close cur 
deallocate cur 

Последний шаг будет обновляемой #a таблицу из #tmp таблицы:

update a set BannerName = t.BannerName, InterActionRate = t.InterActionRate 
from #a a 
join #tmp t on a.BannerID = t.BannerID 

Теперь у вас есть данные обновляются в таблице #a.

+0

ahh, что имеет смысл, но тогда как передать идентификаторы BannerID в #a в хранимую процедуру? Я попытался использовать # a.BannerID, но это дало мне синтаксическую ошибку около '.' – vmedhe2

+0

@ vmedhe2, см. Обновления –

+0

Да, это был ответ спасибо. – vmedhe2