我确定这很简单,当我发现但我一直坐在这上面时我会踢自己 最后一个小时的问题,我很生气,任何人都可以帮助我。
所以我尝试输入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
答案 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,
......
这很有效,不是我所追求的,但它确实起到了作用。