Отчет SSRS перестал работать с ошибкой преобразования, но хорошо работает в ssms?

У меня есть проблема с отчетом, который был написан перед моим временем (я предупреждаю Вас, это имеет много кода, и ошибка не имеет никакого смысла). В основном это - хранимая процедура, которая создает табличную переменную и затем вставляет в нее многократно от различных местоположений. Две из вставок прибывают из функций, другие 3 прибывают из просто записанного sql. Проблемой являются первые рассматриваемые два, хорошо работавшие вместе в SSMS, но в SSRS я продолжаю получать ошибку преобразования, и я знаю, что это от этих двух, другие 3 не влияют на него, включены ли они или нет. Вот часть процедуры только с рассматриваемыми двумя:

declare @QTable TABLE (
ChangeMadeTo Varchar(255) NULL,
EntryDate DateTime NULL,
Updatingagent Varchar(255) NULL,
ColumnName Varchar(255) NULL,
CompanyID Varchar(255) NULL,
CompanyName Varchar(255) NULL,
LastNumberCalled Varchar(15) NULL,
CallNotes Varchar (4000) NULL,
OldValue Varchar(255) NULL,
NewValue Varchar(255) NULL)

insert into @QTable (
ChangeMadeTo, EntryDate, Updatingagent, ColumnName, CompanyID, CompanyName, LastNumberCalled, CallNotes,  OldValue, NewValue
)

SELECT 
'Questionnaire'
, Q.DateTimeStamp
, Agentforename + ' ' + AgentSurname + ' ('+ UserID + ')'
, QuestionText
, cm.companyid
, companyname
, cn.PhoneNumber
, CAST(ISNULL(NULLIF(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(CallNotes, '|', ''), '"', ''), char(9), ' '), char(10), ' '), char(13), ' '), ''), '') AS VARCHAR(4000)) AS CallNotes
, 'N/A'
, Q.Answer
from dbo.gfn_Questionniare_MC_And_FreeText() as Q
join callcentre_web.dbo.Agents as A
on A.AgentID = Q.AgentID
join campaignmapping as cm
on cm.companyid = Q.Company_ID
and cm.campaignid = Q.campaignid
join company as C
on c.companyid = cm.companyid
join Calldetails as CD
on cd.mapid = cm.mapid
left join contactnumbers as cn
on cn.contactnumberid = cd.contactnumberid
Where Q.CampaignID = @CampaignID
and Q.DateTimeStamp between @fromdate and @todate



insert into @QTable (
ChangeMadeTo, EntryDate, Updatingagent, ColumnName, CompanyID, CompanyName, LastNumberCalled, CallNotes,  OldValue, NewValue
)

SELECT 
'Questionnaire'
, Q.DateTimeStamp
, Agentforename + ' ' + AgentSurname + ' ('+ UserID + ')'
, QuestionText
, cm.companyid
, companyname
, cn.PhoneNumber
, CAST(ISNULL(NULLIF(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(CallNotes, '|', ''), '"', ''), char(9), ' '), char(10), ' '), char(13), ' '), ''), '') AS VARCHAR(4000)) AS CallNotes
, 'N/A'
, Q.Answer
from dbo.gfn_Questionniare_Multiple_Selections() as Q
join callcentre_web.dbo.Agents as A
on A.AgentID = Q.AgentID
join campaignmapping as cm
on cm.companyid = Q.Company_ID
and cm.campaignid = Q.campaignid
join company as C
on c.companyid = cm.companyid
join Calldetails as CD
on cd.mapid = cm.mapid
left join contactnumbers as cn
on cn.contactnumberid = cd.contactnumberid
Where Q.CampaignID = @CampaignID
and Q.DateTimeStamp between @fromdate and @todate 

И это две функции, из которых читает вышеупомянутый запрос:

SELECT 
  cm.campaignid
, campaign
, cm.CompanyID as Company_ID
, QuestionText
, DateTimeStamp
, AgentID
, CAST(STUFF((select ',' + CAST(ISNULL(NULLIF(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(e.Answer, '|', ''), '"', ''), char(9), ' '), char(10), ' '), char(13), ' '), ''), '') AS VARCHAR(4000))
        FROM Questionnaire a
        cross apply dbo.SplitString(a.Answer,',') b 
        join CallCentre_Web.dbo.Questionnaire_Answers e 
        on b.s = e.AnswerID
        where isnumeric(b.s) = 1 
        and QuestionTypeID = 2 
        and a.QuestionnaireID = q.QuestionnaireID
        for xml path('')),1,1,'') AS VARCHAR(255)) as Answer
FROM Questionnaire AS q
JOIN dbo.ProfileMapping AS PM
ON PM.ProfileMappingID = Q.ProfileMappingID
JOIN CampaignMapping AS CM
ON PM.MapID = CM.MapID
join callcentre_web.dbo.LK_ProfileType as PT
on PT.ProfileTypeID = PM.ProfileTypeID
JOIN CallCentre_Web.dbo.Questionnaire_Questions QQ
ON Q.QuestionID = QQ.QuestionID
join callcentre_web.dbo.lk_Campaigns as LKC
on LKC.CampaignID = cm.CampaignID
WHERE QuestionTypeID = 2

и

SELECT
  cm.campaignid
, Campaign
, CompanyID as Company_ID
,QuestionText
,CAST(ISNULL(NULLIF(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(Q.Answer, '|', ''), '"', ''), char(9), ' '), char(10), ' '), char(13), ' '), ''), '') AS VARCHAR(4000)) as Answer
, DateTimeStamp
, AgentID
FROM Questionnaire AS Q
JOIN CallCentre_Web.dbo.Questionnaire_Questions QQ
ON Q.QuestionID = QQ.QuestionID
JOIN dbo.ProfileMapping AS PM
ON PM.ProfileMappingID = Q.ProfileMappingID
join callcentre_web.dbo.LK_ProfileType as PT
on PT.ProfileTypeID = PM.ProfileTypeID
JOIN CampaignMapping AS CM
ON PM.MapID = CM.MapID
join callcentre_web.dbo.lk_Campaigns as LKC
on LKC.CampaignID = cm.CampaignID
WHERE QuestionTypeID = 0

union all
SELECT 
    cm.campaignid
, Campaign
, CompanyID
, QuestionText
, CAST(ISNULL(NULLIF(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(QA.Answer, '|', ''), '"', ''), char(9), ' '), char(10), ' '), char(13), ' '), ''), '') AS VARCHAR(4000)) AS Answer
, DateTimeStamp, AgentID
FROM Questionnaire AS Q
JOIN CallCentre_Web.dbo.Questionnaire_Questions QQ
ON Q.QuestionID = QQ.QuestionID
JOIN CallCentre_Web.dbo.Questionnaire_Answers QA
ON Q.Answer = QA.AnswerID
JOIN dbo.ProfileMapping AS PM
ON PM.ProfileMappingID = Q.ProfileMappingID
join callcentre_web.dbo.LK_ProfileType as PT
on PT.ProfileTypeID = PM.ProfileTypeID
JOIN CampaignMapping AS CM
ON PM.MapID = CM.MapID
join callcentre_web.dbo.lk_Campaigns as LKC
on LKC.CampaignID = cm.CampaignID
WHERE QuestionTypeID = 1
)

Обе из этих функций хорошо работают независимо, и оба хорошо работают как часть первого запроса однако, когда я пробую, выполняет его в ssrs, который я получаю: ошибка произошла во время локального процесса отчета. Ошибка произошла во время процесса отчета. Выполнение запросов, отказавшее для набора данных 'gsp_rpt_InfoCaptured' Conversion, перестало работать при преобразовании значения varchar '14.06.2015 14:21:18' к типу данных smallint.

Нет никаких преобразований как бы то ни было. Я имел подобные проблемы в прошлом и странно сумел обойти их путем перемещения части, которая запрашивает анкету вокруг запроса однако, я не могу сделать этого на этот раз.

Я надеюсь, что кто-то может пролить свет на него для меня. У меня есть чувство, что это - что-то, чтобы сделать с частями запроса, выполняемого, прежде чем у других будет шанс завершиться. Я попытался использовать объединения, табличную переменную и CTEs, но всегда подходил к ошибке в какой-то момент. Однако я не могу использовать, ИДУТ, поскольку мне нужны переменные для отчета (Кампания и выборы времени даты)

Заранее спасибо за любую справку.

0
задан 31 March 2015 в 18:43
1 ответ

У меня была аналогичная проблема с появлением ошибок преобразования, когда моя сохраненная процедура была запущена через SSRS, но не в SSMS.

Ошибки исчезли, когда я убедился, что никаких предупреждений не было сохраненной процедурой. например

Предупреждение: нулевое значение удаляется агрегатом или другим набором операция.

Не уверен, поможет ли это, но попробовать стоит.

0
ответ дан 5 December 2019 в 12:53

Теги

Похожие вопросы