SQL Server行名称增量

时间:2013-07-29 04:36:10

标签: sql sql-server select

您好SQL Server专家,

我有一个问题对大多数人来说可能很容易,但我真的不知道如何解决它。我有2个表,一个叫做Sites,一个叫做meter。 “站点”表可以包含一个或多个计量表。当我这样做时加入:

SELECT * FROM Sites
JOIN Meters
WHERE Sites.ID = Meters.SiteID
WHERE Sites.ID = 1

我得到以下内容:

ID SiteName SiteID MeterName
1 Site1 1 Meter1
1 Site1 1 Meter2
1 Site1 1 Meter3

现在,我需要将这两个表中的数据复制到新表中...我已经有了相应的代码,但我不知道如何执行以下操作:我想为@MeterName执行循环,以便只要站点中有米,它就会循环并为米分配不同的名称!在下面的代码中,它将为我提供所有我不想要的仪表的仪表1.

Declare @MeterName varchar(20) = 'Meter 1'
        @SiteID int = 1

INSERT INTO METER (MeterName, SiteID)
SELECT @MeterName, @SiteID

我尝试了以下循环,但我不确定如何在插入后的select语句中编写它:

DECLARE @Name varchar (20) = 'Meter',
        @MeterNumber int = 1,
        @TheMetername varchar(20)

WHILE (@MeterNumber <= (SELECT COUNT(*) FROM Sites
    WHERE SiteID = 1)

BEGIN
SET  @TheMetername = @Name + ' ' + cast(@MeterNumber as varchar(20))
PRINT @Name + ' ' + cast(@MeterNumber as varchar(20))
SET  @MeterNumber = @MeterNumber + 1
END

  INSERT INTO METER (MeterName, SiteID)
    SELECT @MeterName, @SiteID

我该怎么办?除了循环之外还有其他方法吗?

1 个答案:

答案 0 :(得分:0)

由于siteId = 1,插入时将@SiteId替换为1。将INSERT语句放在WHILE循环

WHILE (@MeterNumber <= (SELECT COUNT(*) FROM Sites
    WHERE SiteID = 1)


BEGIN
SET  @TheMetername = @Name + ' ' + cast(@MeterNumber as varchar(20))
PRINT @Name + ' ' + cast(@MeterNumber as varchar(20))

INSERT INTO METER (MeterName, SiteID) VALUES( @MeterName, 1)

SET  @MeterNumber = @MeterNumber + 1
END