SQL返回多个Value

时间:2010-09-01 09:21:12

标签: sql

我确定这很简单,当我发现但我一直坐在这上面时我会踢自己 最后一个小时的问题,我很生气,任何人都可以帮助我。

所以我尝试输入DeviceId和ConfigurationId列,这些值是Device表和Configuration表的主键。是的,这真的是问题所在。

我尝试使用(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

2 个答案:

答案 0 :(得分: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','datetime'),   C.value('@ OSSerialNumber','nvarchar(125)')

FROM [test]。[HardwareComponent]交叉申请                                 HardwareComponent.ComponentXmlData.nodes('OSData')AS T(C)   WHERE HardwareComponent.TypeId = 7

答案 1 :(得分:0)

最后我计算了我需要的上一张表中的行,

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

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

这很有效,不是我所追求的,但它确实起到了作用。