DECLARE @AccountID VARCHAR(10)
SELECT @AccountID = AccountID
FROM MuOnlineSlow.dbo.T_VIPList
WHERE Type = 1
INSERT INTO MUONLINEWEBS.dbo.MUONLINEWEBS_WEB_WAREHOUSE ([AccountID], [name_full], [name], [history], [hex], [cat], [itemid], [level], [luck], [skill], [excellent], [ancient], [time], [has_exe_1], [has_exe_2], [has_exe_4], [has_exe_8], [has_exe_16], [has_exe_32], [socket_exe_6], [socket_exe_7], [socket_exe_8], [server])
VALUES (@AccountID,
'<span style="color:;font-family: tahoma;font-size: 12px;">Bundle of Jewel of Soul </span>',
'Bundle of Jewel of Soul',
'VIP REWARD',
'1F0000000000000000C000FFFFFFFFFF0001D560FFFFFFFFFFFFFFFFFFFFFFFF',
12, 31, 0, 0, 0, 0, 0,
1542466494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'DEFAULT')
问题是查询仅将在T_VIPList
表中找到的最后一个信息插入到WEB_WAREHOUSE
表中,但是我有6行具有不同的AccountID
。为什么不将所有WEB_WAREHOUSE
都输入到AccountID
中呢?
有什么想法吗?
答案 0 :(得分:0)
我认为您想要更进一步,它将从类型1的VIPList中选择所有帐户ID:
INSERT INTO MUONLINEWEBS.dbo.MUONLINEWEBS_WEB_WAREHOUSE
([AccountID], ..., [server]))
SELECT vip.AccountID, ..., 'DEFAULT'
FROM MuOnlineSlow.dbo.T_VIPList vip
WHERE vip.Type = 1;
而且,假定 AccountID是您的主键,您可以通过检查是否存在来使插入更加安全:
INSERT INTO MUONLINEWEBS.dbo.MUONLINEWEBS_WEB_WAREHOUSE
([AccountID], ..., [server]))
SELECT vip.AccountID, ..., 'DEFAULT'
FROM MuOnlineSlow.dbo.T_VIPList vip
WHERE vip.Type = 1
AND NOT EXISTS(SELECT 1
FROM MUONLINEWEBS.dbo.MUONLINEWEBS_WEB_WAREHOUSE w
WHERE w.AccountID = vip.AccountID);
答案 1 :(得分:0)
@AccountID是一个变量,只能保存一个值,而不能包含列表/数组/向量。因此,如果您想知道为什么带WHERE的FROM返回6行并因此将6个值分配给变量时SELECT不会引发错误:因为这是SQL的不确定行为之一。随机值“ wins”,将从返回的6中分配。因此,您需要将INSERT与SELECT结合起来使用而没有变量,以将所有行(=表)作为其他答案显示。