INSERT INTO [std_Receipt]
([rcp_GUID]
,[rcp_Date]
,[rcp_Check_No]
,[rcp_Amount]
--,[rcp_InterestRate]
,[rcp_Purpose]
,[rcp_Deposited]
,[rcp_Statement]
,[rcp_Note]
,[rcp_State]
,[rcp_Reconciled]
,[rcp_ForceItemize]
,[rcp_ForceUnitemize]
,[rcp_per_GUID]
,[rcp_rcs_GUID]
,[rcp_sou_GUID]
,[rcp_chs_GUID]
,[rcp_acc_GUID]
,[rcp_bat_GUID]
,[rcp_FecId]
,[rcp_TransId]
--,[rcp_rlv_GUID]
--,[rcp_let_GUID_ThankYou]
--,[rcp_let_GUID_Compliance]
--,[rcp_ple_GUID]
--,[rcp_link_GUID]
,[rcp_Deleted]
,[rcp_CreatedOn]
,[rcp_CreatedBy]
--,[rcp_UpdatedOn]
--,[rcp_UpdatedBy]
--,[rcp_DeletedOn]
--,[rcp_DeletedBy]
,[rcp_Support]
,[rcp_Oppose]
,[rcp_SourceId]
--,[rcp_DueDate]
--,[rcp_MatchingFundsSequence]
--,[rcp_receivedDate]
,[rcp_ReceivedYear]
--,[rcp_TransferAmount]
--,[rcp_YearPart]
--,[rcp_AmendmentCode]
,[rcp_Locked]
--,[rcp_LockedOn]
--,[rcp_FillingId]
--,[rcp_FillingDate]
--,[rcp_pmt_GUID]
--,[rcp_IsValid]
--,[rcp_ReceivedBy_GUID]
--,[rcp_ReceiptableAmount]
--,[rcp_isNonReceiptable]
--,[rcp_ReceiptSentDate]
)
select
rcpguid,--(<rcp_GUID, uniqueidentifier,>
date,--,<rcp_Date, datetime,>
isnull(check_no,''),--,<rcp_Check_No, nvarchar(50),>
amount,--,<rcp_Amount, money,>
--,<rcp_InterestRate, decimal(9,6),>
isnull(note,''),--,<rcp_Purpose, nvarchar(250),>
deposited,--,<rcp_Deposited, datetime,>
deposited,--,<rcp_Statement, datetime,>
'',--,<rcp_Note, ntext,>
'',--,<rcp_State, nchar(2),>
0,--,<rcp_Reconciled, bit,>
0,--,<rcp_ForceItemize, bit,>
CASE WHEN [type] = 'Unitemized' THEN 1 ELSE 0 END,--,<rcp_ForceUnitemize, bit,>
perguid,--,<rcp_per_GUID, uniqueidentifier,>
rcsguid,--,<rcp_rcs_GUID, uniqueidentifier,>
souguid,--,<rcp_sou_GUID, uniqueidentifier,>
chsguid,--,<rcp_chs_GUID, uniqueidentifier,>
accguid,--,<rcp_acc_GUID, uniqueidentifier,>
batguid,--,<rcp_bat_GUID, uniqueidentifier,>
'',--,<rcp_FecId, nvarchar(20),>
'',--,<rcp_TransId, nvarchar(20),>
--,<rcp_rlv_GUID, uniqueidentifier,>
--,<rcp_let_GUID_ThankYou, uniqueidentifier,>
--,<rcp_let_GUID_Compliance, uniqueidentifier,>
--,<rcp_ple_GUID, uniqueidentifier,>
--,<rcp_link_GUID, uniqueidentifier,>
0,--,<rcp_Deleted, bit,>
getdate(),--,<rcp_CreatedOn, datetime,>
'00000000-0000-0000-0000-000000000000',--,<rcp_CreatedBy, uniqueidentifier,>
--,<rcp_UpdatedOn, datetime,>
--,<rcp_UpdatedBy, uniqueidentifier,>
--,<rcp_DeletedOn, datetime,>
--,<rcp_DeletedBy, uniqueidentifier,>
0,--,<rcp_Support, bit,>
0,--,<rcp_Oppose, bit,>
'CM:'+cast(keyid as nvarchar),--,<rcp_SourceId, nvarchar(10),>
--,<rcp_DueDate, datetime,>
--,<rcp_MatchingFundsSequence, bigint,>
--,<rcp_receivedDate, datetime,>
year(date),--,<rcp_ReceivedYear, varchar(4),>
--,<rcp_TransferAmount, money,>
--,<rcp_YearPart, int,>
--,<rcp_AmendmentCode, nvarchar(3),>
0--,<rcp_Locked, bit,>
--,<rcp_LockedOn, datetime,>
--,<rcp_FillingId, nvarchar(30),>
--,<rcp_FillingDate, datetime,>
--,<rcp_pmt_GUID, uniqueidentifier,>
--,<rcp_IsValid, bit,>
--,<rcp_ReceivedBy_GUID, uniqueidentifier,>
--,<rcp_ReceiptableAmount, money,>
--,<rcp_isNonReceiptable, bit,>
--,<rcp_ReceiptSentDate, datetime,>)
from i_contfile
好的我收到了错误:
将nvarchar数据类型转换为日期时间数据类型会导致超出范围的值。
但非常简单的设置我正在插入我的收据而不确定如何解决这个问题..
答案 0 :(得分:0)
乍一看,导致错误的最可能原因是i_contfile.date
列中的错误数据。另一个日期由GETDATE()
填写,应该没问题。
i_contfile.date
列的架构是什么?它是NVARCHAR
列吗?
查找具有问题的确切行的一种方法是进行二分查找。使用BEGIN TRAN
/ ROLLBACK
插入行的前半部分。如果成功,请尝试下半场。继续缩小行,直到找到导致问题的行。
是否可以执行SELECT * FROM i_contfile
并将结果包含在您的答案中?
我发现这种情况的另一种方式是SELECT
中的列与INSERT
中的列顺序不匹配。在这种情况下,这看起来不是原因。
如果缺少逗号,则会变得非常棘手,因为SQL Server会将下一列视为前一列的列别名。例如,下面的SELECT
似乎有4列,但实际上只有3列。如果没有逗号,SELECT
会将ColB
重命名为ColC
。对于巨大的INSERT
查询,这是一个容易犯的错误:
INSERT INTO Dest
(
Col1,
Col2,
Col3
)
SELECT
ColA,
ColB -- missing comma!
ColC, -- this is now the alias of ColB
ColD
FROM Source
- 更新 -
您说输入列是NVARCHAR
列。您可以使用ISDATE function:
INSERT INTO std_Receipt
(...rcp_Date...)
SELECT...
CASE WHEN ISDATE(date) = 0 THEN NULL
ELSE date
END,
...
使用这种技术可以很快在i_contfile
表中找到错误的日期数据:
SELECT *
FROM i_contfile
WHERE ISDATE(date) = 0
如果源日期数据有一些自定义格式,我们应该能够在看到格式后找出如何处理数据。