1

我有一个没有做我想做的查询,我不知道如何解决这个问题:

DECLARE @RoomMap TABLE
    (ID int IDENTITY(1,1),
    SourceRoom int,--> SourceRoomID
    SourceSiteID int,
    TargetRoom int, -->DemoRoomID
    TargetSiteID int
    )

INSERT INTO @RoomMap
(SourceRoom, SourceSiteID)
SELECT tblControls_Rooms.ID, @origSiteID
FROM tblControls_Rooms
WHERE SiteID = @OrigSiteID

INSERT INTO @RoomMap
(TargetRoom, TargetSiteID)
SELECT tblControls_Rooms.ID, @NewSiteID
FROM tblControls_Rooms
WHERE SiteID = @newSiteID

INSERT INTO DemoRoomMap 
(DemoRoomID, SourceRoomID)
SELECT TargetRoom, SourceRoom
FROM @RoomMap

这是我运行时的 DemoRoomMap 表:

TargetRoom  SourceRoom
    332 2
    333 3
    334 4
    335 5
    336 6
    337 9
    338 10

我运行上述查询时的结果:

TargetRoom  SourceRoom
NULL    1942
NULL    1943
NULL    1944
NULL    1945
NULL    1946
2025    NULL
2026    NULL
2027    NULL
2028    NULL

如您所见,有些NULL值我真的不想插入!我怎样才能摆脱它们?

4

2 回答 2

2

您可以通过在其中插入一个值来摆脱它们。看,这个语句没有插入一个值到TargetRoom

INSERT INTO @RoomMap
(SourceRoom, SourceSiteID)
SELECT tblControls_Rooms.ID, @origSiteID
FROM tblControls_Rooms
WHERE SiteID = @OrigSiteID

此外,后续语句不会将值插入SourceRoom

INSERT INTO @RoomMap
(TargetRoom, TargetSiteID)
SELECT tblControls_Rooms.ID, @NewSiteID
FROM tblControls_Rooms
WHERE SiteID = @newSiteID

所以,当你完成后,你会得到一组TargetRoom没有SourceRoom.

于 2013-07-31T13:51:15.273 回答
0
DECLARE @RoomMap TABLE
(ID int IDENTITY(1,1),
SourceRoom int,--> SourceRoomID
SourceSiteID int,
TargetRoom int, -->DemoRoomID
TargetSiteID int
)

INSERT INTO @RoomMap
(SourceRoom, SourceSiteID, TargetRoom TargetSiteID )
SELECT S.ID, @origSiteID, T.ID, @NewSiteID
FROM 
(
    SELECT ID FROM tblControls_Rooms WHERE SiteID = @OrigSiteID
) S
CROSS JOIN
(
    SELECT ID FROM tblControls_Rooms WHERE SiteID = @NewSiteID
) T
于 2013-07-31T13:54:54.747 回答