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