将数组插入SQL连接表

时间:2018-09-14 18:24:05

标签: sql sql-server powershell sql-server-2016

背景是我从具有嵌套对象的API获取设备数据,并且多个数组(例如IPAddress)可能具有多个地址。目标是将其放入规范化的SQL 2016数据库中。如果可能的话,我试图避免使用for循环过多地重新格式化数据,并且出于性能原因而试图避免使用游标。最好传递一个定界的字符串并让SQL承担繁重的工作。在此示例中,有两个表,第一个用于设备

  1. tblDevices-在此示例中,它将包含每个设备和静态设置,为简单起见,仅包含设备名称
  2. tblJuncIpAddress-该表具有与设备关联的IP,类型为1或2

我尝试使用以下示例:https://www.mssqltips.com/sqlservertip/4884/sql-server-2016-stringsplit-function/

我可以使用JOIN或CROSS APPLY来更新\插入代码,以添加/更新设备并添加/更新IP地址吗?我正在尝试类似的操作,但是CROSS APPLY不喜欢这种格式。

DECLARE @DeviceName varchar(50) = 'Server123'
DECLARE @IPAddressType1 varchar(250) = '1.2.3.4,1.1.1.1'
DECLARE @IPAddressType2 varchar(250) = '8.8.8.8,9.9.9.9'

INSERT INTO tblFSDevices ('deviceId') Values (@DeviceName)

DECLARE @devId int = SCOPE_IDENTITY()

INSERT INTO tblJuncIpAddress (devId, ipAddress, [type])
SELECT Id, SPL.value, 1
FROM tblDevices
WHERE devId = @devId
CROSS APPLY STRING_SPLIT(@IPAddressType1,',') AS SPL;

如果有关系,获取API数据并插入的代码为Powershell。我看过其他示例,在这些示例中,您将生成('IP1'),('IP2'),然后对这些值进行批量插入,但是我不确定如何实现UPDATE或INSERT,除非您只是首先执行DELETE删除现有记录。我接受任何解决方案,目标是使一个>多个值尽可能简单地进入数据库。

0 个答案:

没有答案