#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. Верно, я закомментировал разделы кода, пока не увидел, где происходит сбой. Ошибка заставила меня подумать, что данные в памяти будут усечены, что не позволит мне вставить .. но я думаю, это имеет смысл, поскольку только после того, как я попытался вставить и сопоставить длины полей, у меня возникла проблема. Спасибо, чувак.