0

次の手順を作成していますが、実行すると以下のエラーが発生します

クライアントのレンダリング中にエラーが発生しました。
レポートの処理中にエラーが発生しました。
データセット dsCitiDriverStats の次のデータ行を読み取ることができません。nvarchar 値 'Swedish' をデータ型 int に変換するときに変換に失敗しました。

ストアド プロシージャのソース コードは次のとおりです。

Create PROCEDURE [dbo].[usp_DWReport_CITICallDrivers_Test1]
  @pTransactionsCreatedFrom DATETIME, 
  @pTransactionsCreatedTo DATETIME,
  @pCallerType NVARCHAR(4000),  
  @pCompany NVARCHAR(4000)
AS
BEGIN
  SET NOCOUNT ON;
  SET DATEFIRST 1;

  DECLARE @ComCount int

  SET @ComCount = ( SELECT CAST(LEN(@pCompany) AS int) )
  print @ComCount

  IF @ComCount < 4000
  BEGIN
     SELECT en.ENQ_CREATION_DT AS [Date] ,
         DATEPART(dw, en.ENQ_CREATION_DT) AS WeekDayNo,
         en.ENQ_SOURCE AS CallType,
         CASE enq_caller_type
           WHEN '1389' THEN '3rd'
           WHEN '1390' THEN 'CAS'
           WHEN '1391' THEN 'CH'
           WHEN '1392' THEN 'PA'
           ELSE NULL
         END AS CallerType,
         RIGHT(en.ENQ_CC_NUMBER, 6) AS Last6DigitsOfCardNo,
         en.ENQ_CUSTOMER_NAME AS CustomerName,
         en.ENQ_COMPANY_NAME AS CustomerCompany,
         a.ACCNT_CON_FST_NAME AS LineOfBusiness,
         en.ENQ_ECOUNT_ID AS EcountID,
         lov.Value1 AS [Language],
         en.ENQ_OUTCOME AS ClassificationOfTheCall,
         en.ENQ_COMMENTS_LONG AS Comments,
         en.ENQ_CREATOR_LOGIN AS AgentInitials,
         CASE en.ENQ_CUSTOM_CHK1
           WHEN 1 THEN 'Yes'
           WHEN 0 THEN 'No'
           ELSE NULL
         END AS VIP
  FROM ENQUIRY                      en 
  JOIN ACCOUNTS                     a   ON a.ACCNT_ID      = en.ENQ_ACCNT_CSN
  JOIN DW_Admin.dw_hold_listofvalue lov ON en.ENQ_LANGUAGE = lov.ID
  WHERE en.ENQ_CREATION_DT >= @pTransactionsCreatedFrom
    AND en.ENQ_CREATION_DT <  DATEADD(dd, DATEDIFF(dd, 0, @pTransactionsCreatedTo) + 1, 0)
    AND a.ACCNT_CON_FST_NAME IN ( SELECT s.Item FROM dbo.Split( @pCallerType , ',' ) s )
    AND en.ENQ_COMPANY_NAME  IN ( SELECT s.Item FROM dbo.Split( @pCompany    , ',' ) s )

END  
ELSE
BEGIN

  print 'more than 4K'
  SELECT en.ENQ_CREATION_DT AS [Date],
         DATEPART(dw, en.ENQ_CREATION_DT) AS WeekDayNo,
         en.ENQ_SOURCE AS CallType,
         CASE enq_caller_type
           WHEN '1389' THEN '3rd'
           WHEN '1390' THEN 'CAS'
           WHEN '1391' THEN 'CH'
           WHEN '1392' THEN 'PA'
           ELSE NULL
         END AS CallerType,
         RIGHT(en.ENQ_CC_NUMBER, 6) AS Last6DigitsOfCardNo,
         en.ENQ_CUSTOMER_NAME AS CustomerName,
         en.ENQ_COMPANY_NAME AS CustomerCompany,
         a.ACCNT_CON_FST_NAME AS LineOfBusiness,
         en.ENQ_ECOUNT_ID AS EcountID,
         lov.Value1 AS [Language],
         en.ENQ_OUTCOME AS ClassificationOfTheCall,
         en.ENQ_COMMENTS_LONG AS Comments,
         en.ENQ_CREATOR_LOGIN AS AgentInitials,
         CASE en.ENQ_CUSTOM_CHK1
           WHEN 1 THEN 'Yes'
           WHEN 0 THEN 'No'
           ELSE NULL
         END AS VIP
  FROM ENQUIRY                      en 
  JOIN ACCOUNTS                     a   ON a.ACCNT_ID      = en.ENQ_ACCNT_CSN
  JOIN DW_Admin.dw_hold_listofvalue lov ON en.ENQ_LANGUAGE = lov.ID
  WHERE en.ENQ_CREATION_DT >= @pTransactionsCreatedFrom
    AND en.ENQ_CREATION_DT <  DATEADD(dd, DATEDIFF(dd, 0, @pTransactionsCreatedTo) + 1, 0)
    AND a.ACCNT_CON_FST_NAME IN ( SELECT s.Item FROM dbo.Split( @pCallerType , ',' ) s)
    AND en.ENQ_COMPANY_NAME  IN ( SELECT DISTINCT
                                         COMP_NAME
                                  FROM COMPANIES
                                  WHERE COMP_STATUS = 'Active'
                                )

END

RETURN 0
END

お知らせ下さい

4

2 に答える 2

0

Swedishテキストを整数に変換しようとすると、何が起こると思いますか? @devinallenaz が指摘したように、 tableenquiryの列enq_languageが数値以外のデータを含んでいる可能性が非常に高く、それを整数に変換して tableの列(おそらく整数)nvarcharに結合しようとすると失敗が発生します。DW_Admin.dw_hold_listofvalueid

問題の詳細を整理する通常の方法は、クエリを機能する最小限のものにまで取り除くことです。あなたの場合、結果セットのすべての列をコメントアウトし、それらを次のようなものに置き換えますcount(*)。次に、句内のすべてのテーブル参照(最初のものを除く)whereとともに、句全体をコメント アウトします。from

クエリを実行します。それは機能しますか?そうでない場合は、問題を特定して修正します。

fromその場合は、句の次のテーブルのコメントを外します。結合条件に複数の比較がある場合は、この最初の比較のみをコメント解除します。それを実行します。それは機能しますか?その場合は、残りの結合基準を 1 つずつコメント解除します。それでも機能する場合は、from句の次の表で演習を繰り返します。

エラーが見つからずに from 句を通過した場合は、一度に 1 つずつ、where 句のコメントを外してください。

障害点を特定したら、それをデバッグします。group by関連する列の度数分布表を生成するには、選択クエリを実行します。ここに where ステートメントを追加して、10 進数だけで構成されるデータを削除することができます。これにより、問題のあるデータが特定される可能性があります。

ここで、データを消去する (データの問題である場合) か、クエリで回避するかを決定する必要があります。データを消去する場合は、不要なデータが入り込むのを防ぐために、コードにガードを配置することを検討してください。

ここにはロケット科学は含まれていません。昔ながらの警察の仕事。

幸運を。

于 2013-11-05T01:18:00.907 に答える