SQL - 尝试使用 while 循环向 table 添加行,但没有添加任何行,我也没有收到任何错误消息
SQL - Trying to add rows to a table with while loop, but no rows get added and I get no error message
我正在尝试将新 IP 地址行添加到名为 IP 分配的现有 table,但没有添加任何行。我也没有收到错误。发生了什么事?
SELECT
*
FROM
IP_Alloc
BEGIN
DECLARE @IPaddress VARCHAR
SET @IPaddress = '.'
DECLARE @IPoct1 VARCHAR
SET @IPoct1 = 10
DECLARE @IPoct2 VARCHAR
SET @IPoct2 = 200
DECLARE @IPoct3 VARCHAR
SET @IPoct3 = 20
DECLARE @IPoct4 INT
SET @IPoct4 = 0
END
WHILE (@IPoct4 < 256)
BEGIN
SET @IPaddress = CONCAT(@IPoct1,'.', @IPoct2,'.' , @IPoct3,'.', @IPoct4);
INSERT INTO IP_Alloc (site, area, line, Device, deviceDescription, PartNo, IPaddress, deviceType, MACaddress, comment, IPoct1, IPoct2, IPoct3, IPoct4, created, hostName, modelNo, modified, revision, series, switchPort, visible, wallPlate)
--Generic values, to be changed later
VALUES ('BIL', 'area', 'line', 'Device', 'deviceDescription', 'PartNo', @IPaddress, 'deviceType', 'MACaddress','comment', @IPoct1, @IPoct2, @IPoct3, @IPoct4, '0000-00-00', 'hostName', 'modelNo', '0000-00-00', 'revision', 'series', 'switchPort', '0', 'wallPlate')
SET @IPoct4 = @IPoct4 + 1
END
所以您的数据类型声明存在一些问题。 @IPoct4 需要是一个 int,因为您已经能够遍历变量。
@IPaddress 必须是 VARCHAR,因为它有一个 .但是,您需要添加长度声明。如果未指定,则长度默认为 1。VARCHAR(15) 足以用于 ip 地址。
然后对于@IPoct1、@IPoct2、@IPoct3,您当前将它们指定为 varchar,但是您使用不带语音标记的数字设置它们。您只能在定义 INT 时这样做。你最好将它定义为 int
您还有一个不需要的开始和结束。所以你的查询会变成:
DECLARE @IPaddress VARCHAR(15)
SET @IPaddress = '.'
DECLARE @IPoct1 INT
SET @IPoct1 = 10
DECLARE @IPoct2 INT
SET @IPoct2 = 200
DECLARE @IPoct3 INT
SET @IPoct3 = 20
DECLARE @IPoct4 INT
SET @IPoct4 = 0
WHILE (@IPoct4 < 256)
BEGIN
SET @IPaddress = CONCAT(@IPoct1,'.', @IPoct2,'.' , @IPoct3,'.', @IPoct4);
INSERT INTO IP_Alloc (site, area, line, Device, deviceDescription, PartNo, IPaddress, deviceType, MACaddress, comment, IPoct1, IPoct2, IPoct3, IPoct4, created, hostName, modelNo, modified, revision, series, switchPort, visible, wallPlate)
--Generic values, to be changed later
VALUES ('BIL', 'area', 'line', 'Device', 'deviceDescription', 'PartNo', @IPaddress, 'deviceType', 'MACaddress','comment', @IPoct1, @IPoct2, @IPoct3, @IPoct4, '0000-00-00', 'hostName', 'modelNo', '0000-00-00', 'revision', 'series', 'switchPort', '0', 'wallPlate')
SET @IPoct4 = @IPoct4 + 1
END
我正在尝试将新 IP 地址行添加到名为 IP 分配的现有 table,但没有添加任何行。我也没有收到错误。发生了什么事?
SELECT
*
FROM
IP_Alloc
BEGIN
DECLARE @IPaddress VARCHAR
SET @IPaddress = '.'
DECLARE @IPoct1 VARCHAR
SET @IPoct1 = 10
DECLARE @IPoct2 VARCHAR
SET @IPoct2 = 200
DECLARE @IPoct3 VARCHAR
SET @IPoct3 = 20
DECLARE @IPoct4 INT
SET @IPoct4 = 0
END
WHILE (@IPoct4 < 256)
BEGIN
SET @IPaddress = CONCAT(@IPoct1,'.', @IPoct2,'.' , @IPoct3,'.', @IPoct4);
INSERT INTO IP_Alloc (site, area, line, Device, deviceDescription, PartNo, IPaddress, deviceType, MACaddress, comment, IPoct1, IPoct2, IPoct3, IPoct4, created, hostName, modelNo, modified, revision, series, switchPort, visible, wallPlate)
--Generic values, to be changed later
VALUES ('BIL', 'area', 'line', 'Device', 'deviceDescription', 'PartNo', @IPaddress, 'deviceType', 'MACaddress','comment', @IPoct1, @IPoct2, @IPoct3, @IPoct4, '0000-00-00', 'hostName', 'modelNo', '0000-00-00', 'revision', 'series', 'switchPort', '0', 'wallPlate')
SET @IPoct4 = @IPoct4 + 1
END
所以您的数据类型声明存在一些问题。 @IPoct4 需要是一个 int,因为您已经能够遍历变量。
@IPaddress 必须是 VARCHAR,因为它有一个 .但是,您需要添加长度声明。如果未指定,则长度默认为 1。VARCHAR(15) 足以用于 ip 地址。
然后对于@IPoct1、@IPoct2、@IPoct3,您当前将它们指定为 varchar,但是您使用不带语音标记的数字设置它们。您只能在定义 INT 时这样做。你最好将它定义为 int
您还有一个不需要的开始和结束。所以你的查询会变成:
DECLARE @IPaddress VARCHAR(15)
SET @IPaddress = '.'
DECLARE @IPoct1 INT
SET @IPoct1 = 10
DECLARE @IPoct2 INT
SET @IPoct2 = 200
DECLARE @IPoct3 INT
SET @IPoct3 = 20
DECLARE @IPoct4 INT
SET @IPoct4 = 0
WHILE (@IPoct4 < 256)
BEGIN
SET @IPaddress = CONCAT(@IPoct1,'.', @IPoct2,'.' , @IPoct3,'.', @IPoct4);
INSERT INTO IP_Alloc (site, area, line, Device, deviceDescription, PartNo, IPaddress, deviceType, MACaddress, comment, IPoct1, IPoct2, IPoct3, IPoct4, created, hostName, modelNo, modified, revision, series, switchPort, visible, wallPlate)
--Generic values, to be changed later
VALUES ('BIL', 'area', 'line', 'Device', 'deviceDescription', 'PartNo', @IPaddress, 'deviceType', 'MACaddress','comment', @IPoct1, @IPoct2, @IPoct3, @IPoct4, '0000-00-00', 'hostName', 'modelNo', '0000-00-00', 'revision', 'series', 'switchPort', '0', 'wallPlate')
SET @IPoct4 = @IPoct4 + 1
END