CTE ВСТАВИТЬ В ошибку: строка или двоичные данные будут усечены

#sql #insert #sql-server-2012 #common-table-expression

#sql #вставить #sql-server-2012 #common-table-expression

Вопрос:

 ; 
With CTE AS 
( 
       SELECT  IIF (ISNULL (POLHOLDERID,'') ='', Member_id, PolHolderId) AS RespMemberId, 
        CASE WHEN (  Member_id = PolHolderId)  then 1 When ISNULL (PolHolderId,'') <> '' THEN 2 ELSE 3 END AS RespLevel ,  
       ROW_Number() OVER (PARTITION BY [Case Base#] ORDER BY CASE WHEN (  Member_id = PolHolderId)  then 1 When ISNULL (PolHolderId,'') <> '' THEN 2 ELSE 3 END, DOB) AS RN, 
       * FROM [dbo].[AllHRS]
       )
INSERT INTO dbo.Eligibility (
      [CaseBaseNo]
      ,[RecordType]
      ,[HealthPlanId]
      ,[PlanId]
      ,[HPMemberId]
      ,[HPMemberId2]
      ,[FirstName]
      ,[MiddleName]
      ,[LastName]
      ,[Street1]
      ,[Street2]
      ,[City]
      ,[State]
      ,[Zip]
      ,[GroupNumber]
      ,[UserDefined1]
      ,[UserDefined2]
      ,[StartDate]
      ,[TerminationDate]
      ,[InitialActivationCode]
      ,[LoadAmount]
      ,[ServiceDate]
      ,[ServiceCode]
      ,[ServiceDescription]
      ,[HPReferenceNo]
      ,[IssueNewCard]
      ,[Language]
      ,[Filler])
SELECT 
[Case Base#] as CaseBase, 
'117A' as RecordType, 
'H81' as HealthPlanID, 
'H81-117A' as PlanId, 
RespMemberId AS MemberId,
null, 
IIF (ISNULL (POLHOLDERID,'') ='', Member_First_Name, IIF(Charindex(',', PolHolderName)> 0, Substring(PolHolderName, 1,Charindex(',', PolHolderName)-1), PolHolderName)), 
NULL,
IIF (ISNULL (POLHOLDERID,'') ='', Member_Last_Name, Substring(LTRIM(IIF(Charindex(',', PolHolderName)> 0, Substring(PolHolderName, Charindex(',', PolHolderName) 1,LEN(PolHolderName)), PolHolderName)),1,charIndex(' ',
     LTRIM(IIF(Charindex(',', PolHolderName)> 0, Substring(PolHolderName, Charindex(',', PolHolderName) 1,LEN(PolHolderName)), PolHolderName)) ' '))),
ADDRESS1, 
ADDRESS2, 
CITY, 
STATE, 
ZIP, 
[Case Base#], 
NULL, 
NULL, 
FORMAT(GETDATE(), 'MM/dd/yyyy') AS [START DATE], 
IIF([Member TermDate] is null, '', 
DATEADD(month,30,[Member TermDate])), 
NULL, 
0.00, 
[INTERVIEW DATE], 
CASE
    WHEN Clinical_Variable not like 'W' and Clinical_Variable not like 'X' THEN 'HRS'
    WHEN Clinical_Variable like 'W' THEN 'HRA'
    WHEN Clinical_Variable like 'X' THEN 'CC'
END as Service_Code, 
NULL, 
0.00, 
'YES', 
NULL, 
NULL
FROM CTE WHERE RN =1
  

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

Ошибка гласит:

Msg 8152, Level 16, State 13, Line 2
String or binary data would be truncated.
The statement has been terminated.

Кто-нибудь может помочь? Кто-нибудь знает, что происходит?

Комментарии:

1. Похоже, вы пытаетесь запихнуть 10 фунтов шинолы в 5-фунтовый пакет.

2. отличное наблюдение. Звучит технически…

Ответ №1:

Из ошибки очевидно, что для одного из столбцов (или более) данные, которые вы пытаетесь установить, больше, чем размер столбца.. Я бы посмотрел на столбцы имен и столбцы адресов. Простым способом отладки этого было бы поместить MAX(LEN()) вокруг столбцов в вашем предложении select и сравнить его с вашим определением таблицы.

Комментарии:

1. Верно, я закомментировал разделы кода, пока не увидел, где происходит сбой. Ошибка заставила меня подумать, что данные в памяти будут усечены, что не позволит мне вставить .. но я думаю, это имеет смысл, поскольку только после того, как я попытался вставить и сопоставить длины полей, у меня возникла проблема. Спасибо, чувак.