INSERT INTO purchase_record
(purchased_from_id, purchase, paid, balance, bank, cheque_no, date,
cheque_status,time)
VALUES (
(SELECT purchased_from_id FROM purchased_from WHERE name = 'Hassan Izhar'),
(SELECT total FROM purchase_receipt WHERE purchase_receipt_id = '0000001'),
10000,
(SELECT balance FROM purchase_receipt WHERE purchase_receipt_id = '0000001'),
'UBL',
'1234567',
'10-JUN-1014',
'Cleared',
'(SELECT SUBSTRING(convert(varchar, time,108), 1, 5) FROM purchase_receipt WHERE purchase_receipt_id = ''0000001'')');
我尝试了此查询但出现了以下错误:
Msg 242, Level 16, State 3, Line 1
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
The statement has been terminated.
答案 0 :(得分:1)
您的日期字段的数据类型是什么?如果它 DATETIME 那么它的日期范围是 1753年1月1日至9999年12月31日,您已经过的日期是' 10-JUN-1014'这个数据类型的范围超出范围。如果您想存储此日期,则应将数据类型用作 DATATIME2 。
另外请记住,在SQL中传递日期的最佳格式是YYYY-MM-DD。
答案 1 :(得分:0)
您需要构造正确连接的SQL Select语句并将其插入表中,如下所示:
INSERT INTO purchase_record
(purchased_from_id, purchase, paid, balance, bank, cheque_no, date,
cheque_status,time)
SELECT f.purchased_from_id, r.total, r.balance, 10000,'UBL','1234567',
'10-JUN-1014', 'Cleared', SUBSTRING(convert(varchar, r.time, 108), 1, 5)
FROM purchased_from f
INNER JOIN purchase_receipt r ON f.purchaser_id = r.purchaser_id
WHERE f.purchase_receipt_id = '0000001';
请注意,在上述声明中,您需要正确定义连接条件。我放了一个占位符ON f.purchaser_id = r.purchaser_id
(这显然是不正确的,因为我不知道你的数据库架构)。请了解您的purchase_from和purchaser_receipt表是如何链接的,并使用适当的列进行连接
答案 2 :(得分:0)
您的日期时间格式不符合SQL格式..
10-JUN-1014应为YYYY-MM-DD 1014-06-10
答案 3 :(得分:0)
假设time
表上的purchase_record
列的类型为Time
,请尝试以下操作:
-- Get Purchased From Id
DECLARE @PurchasedFromId AS INT
SELECT @PurchasedFromId = purchased_from_id
FROM purchased_from
WHERE name = 'Hassan Izhar'
INSERT INTO purchase_record
(purchased_from_id, purchase, paid, balance, bank, cheque_no, date,
cheque_status, time)
SELECT @PurchasedFromId AS Purchased_From_Id,
total AS purchase,
10000 AS Paid,
balance,
'UBL' AS Bank,
'1234567' cheque_no,
'10-JUN-1014' as [Date],
'Cleared' AS Cheque_Status,
CONVERT(Time, [time], 108) AS [Time] -- Use 114 instead of 108 for 24 hour
FROM Purchase_Receipt
WHERE Purchase_Receipt_Id = '0000001'
如果time
表中的Purchase_Receipt
与time
表中的Purchase_Record
相同,则无需CONVERT
。