-1

您好 SQL Server 专家,

我有一个对你们大多数人来说可能很容易的问题,但我真的不知道如何解决它。我有两张桌子,一张叫做 Sites,一张叫做 Meters。Sites 表可以有一个或多个仪表。当我这样做时加入:

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 做一个循环,以便它循环只要站点中有仪表,就可以为仪表分配不同的名称!在下面的代码中,它将为我不想要的所有仪表提供 Meter 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

我该如何解决这个问题?除了循环还有其他方法吗?

4

1 回答 1

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
于 2013-07-29T04:51:38.733 回答