2010-09-01 124 views
0

我確定這很簡單,我會踢我自己,當我發現,但我一直坐在這個 問題的最後一個小時,我感到惱火,任何人都可以幫助我。SQL返回多個值

所以我想輸入一個DeviceId和ConfigurationId列的值是設備表和配置表中的主鍵。是的,這就是所有問題。

我嘗試使用(SELECT ID FROM DeviceId)但是,隨着錯誤出現,

Subquery returned more than 1 value

這裏是我使用GETDATE()的只是把人此刻的代碼和C.Values是我將一些XML分解到表中。

INSERT INTO [Container].[dsc].[DeviceConfiguration] 
(DateInserted, 
    DeviceId, 
    ConfigurationId, 
    DateRegistered, 
    DateRemoved, 
    OperatingSystemInstallDate, 
    OperatingSystemSerialNumber 
) 

SELECT GETDATE(), 
    <This will need to be DeviceId>, 
    <This will need to be the ConfigurationId>, 
    GETDATE(), 
    GETDATE(), 
    C.value('@OSInstallDate', 'datetime'), 
    C.value('@OSSerialNumber', 'nvarchar(125)') 

FROM [test].[HardwareComponent] CROSS APPLY 
           HardwareComponent.ComponentXmlData.nodes('OSData')AS T(C) 
    WHERE HardwareComponent.TypeId = 7 

編輯: 更多信息對不起, 2列設置爲外鍵。

ALTER TABLE [dsc].[DeviceConfiguration] 
    WITH CHECK 
    ADD CONSTRAINT FK_DeviceConfiguration_Device 
    FOREIGN KEY (DeviceId) 
    REFERENCES [dsc].[Device](Id); 
GO 

ALTER TABLE [dsc].[DeviceConfiguration] 
    WITH CHECK 
    ADD CONSTRAINT FK_DeviceConfiguration_Configuration 
    FOREIGN KEY (ConfigurationId) 
    REFERENCES [dsc].[Configuration](Id); 
GO 
+3

SELECT ID FROM DeviceId將檢索表DeviceId中的所有ID。 你錯過了一個WHERE。它真正取決於你的表結構(DeviceId和ConfigurationId)以及你應該如何從中獲取數據。 無論是那個還是DeviceId/ConfigurationId都是一個外鍵,並且您需要在這些表上插入您*插入的相同ID。 – 2010-09-01 09:24:00

+0

事情是我有很多記錄進入表 – Matthew 2010-09-01 09:40:00

回答

0

最後,我在前面的表,我需要計算的行,

DECLARE @DeviceId = (SELECT COUNT(Id) FROM .....) 

... 
... 
... 
SELECT 
     GETDATE(), 
     (ROW_NUMBER()OVER(ORDER BY Id) % @DeviceId) AS DeviceId, 
     ...... 

和起作用的,不完全是我是之後,但它的工作。

1

您需要在DeviceConfiguration表中有主鍵ID字段,並且在插入查詢後添加下面的行。

申報@DeviceId INT

申報@ConfigurationId INT

SELECT @DeviceId = DEVICEID FROM DeviceConfiguration WHERE ID = @@ IDENTITY

SELECT @ConfigurationId = ConfigurationId FROM DeviceConfiguration WHERE ID = @@ IDENTITY

並修改您的選擇查詢如下;

SELECT GETDATE(), @DeviceId@ConfigurationId, GETDATE(), GETDATE(), C.value( '@ OSInstallDate', '日期時間'), C.value ( '@OSSerialNumber', '爲nvarchar(125)')

FROM [測試]。[HardwareComponent] CROSS APPLY HardwareComponent.ComponentXmlData.nodes( 'OS​​DATA')AS T(℃) WHERE HardwareComponent.TypeId = 7

+0

我只是從這個NULL值? – Matthew 2010-09-01 10:18:36

+0

Fafed在技巧和不知何故結束與每個行數爲30,000的DeviceId 0.o,但唉,我仍然沒有得到從它們的Tabels填充的DeviceId和ColumnId沒有什麼。 – Matthew 2010-09-01 10:36:44

+0

ohh yeah剛剛意識到您的查詢,抱歉您需要從設備表中獲取DeviceId的誤導性答案。在這種情況下,這取決於你真正需要什麼。 (SELECT ID FROM DeviceId)這個查詢不能返回你單行,這就是爲什麼它給'子查詢返回多個值'的錯誤。 所以你需要在插入選擇查詢中使用單行。在這種情況下 你需要這樣的smt。 SELECT ID FROM DeviceId WHERE //這裏有一些子句 – apprich 2010-09-01 11:01:31