0

我正在做一个项目,我需要将数据从 excel 表中提取到 SQL Server ,那一点已经成功了。现在我的问题是,对于一个名为 product size 的特定列
,我想根据其他表中的 product size 更新当前表,我真的很困惑,请帮帮我

请查表结构

    CREATE TABLE [dbo].[T_Product](
[ProductID] [int] IDENTITY(1,1) NOT NULL,
[PartNo] [nvarchar](255) NULL,
[CategoryID] [int] NULL,
[MaterialID] [float] NULL,
[WireformID] [float] NULL,
[ProductName] [nvarchar](50) NULL,
[ProductSize] [nvarchar](50) NULL,
[ProductLength] [varchar](20) NULL,
[ProductActive] [bit] NULL,
[ProductImage] [varchar](60) NULL
 ) ON [PRIMARY]

     CREATE TABLE [dbo].[T_ProductSize](
[Code] [int] IDENTITY(1,1) NOT NULL,
[ProductSize] [nvarchar](50) NULL,
[Length] [nchar](20) NULL
 ) ON [PRIMARY]

 GO
4

3 回答 3

2

好的,所以忽略前面的答案,我弄错了!

你想要这样的东西,我想:

UPDATE T_Product
SET [ProductLength] = ps.[Length]
FROM T_Product p
INNER JOIN T_ProductSize ps
ON p.[ProductSize] = ps.[ProductSize]

这将从 T_ProductSize 获取 Length 值,并根据 T_Product.ProductSize 的值将其放入 T_Product.ProductLength

于 2012-06-28T11:52:12.107 回答
0

你提到了一个外键,但你没有包含它的定义。它在您的示例中的两个表之间吗?如果是这样,哪些列是关键?产品尺寸是关键吗?如果是这样,那么您的问题没有多大意义,因为两个表中的值相同。

您的意思是说产品大小是否可能存储在单独的表中而不是 T_Product 表中?在这种情况下,您将需要 T_ProductSize 表中的代码,而不是 T_Product 中的 ProductSize(我也可以建议您将其称为“ProductSizeCode”或更好的“ProductSizeId”或类似名称而不是“代码”吗?简单地称为代码的列可以非常混乱,因为您没有简单的方法知道该值在哪个表中)。此外,您应该始终在每个表上创建一个主键:没有外键就不能拥有外键。它们不必是集群的,这取决于您搜索表的方式,但我在此示例中使用集群 PK。这会给你这样的东西:

CREATE TABLE [dbo].[T_Product](
    [ProductID] [int] IDENTITY(1,1) NOT NULL,
    [PartNo] [nvarchar](255) NULL,
    [CategoryID] [int] NULL,
    [MaterialID] [float] NULL,
    [WireformID] [float] NULL,
    [ProductName] [nvarchar](50) NULL,
    [ProductSizeId] [int] NOT NULL,
    [ProductLength] [varchar](20) NULL,
    [ProductActive] [bit] NULL,
    [ProductImage] [varchar](60) NULL

CONSTRAINT [PK_T_Product] PRIMARY KEY CLUSTERED 
    (
    [ProductID] ASC
    ) ON [PRIMARY]
) ON [PRIMARY]

GO

CREATE TABLE [dbo].[T_ProductSize](
    [ProductSizeId] [int] IDENTITY(1,1) NOT NULL,
    [ProductSize] [nvarchar](50) NULL,
    [Length] [nchar](20) NULL
CONSTRAINT [PK_T_ProductSize] PRIMARY KEY CLUSTERED 
    (
    [ProductSizeId] ASC
    ) ON [PRIMARY]
) ON [PRIMARY]
GO

--Now add your foreign key to T_Product.
ALTER TABLE [T_Product]  WITH NOCHECK ADD CONSTRAINT [FK_Product_ProductSize] FOREIGN KEY([ProductSizeId])
REFERENCES [T_ProductSize] ([ProductSizeId])
GO
ALTER TABLE [T_Product] CHECK CONSTRAINT [FK_Product_ProductSize]
GO

现在,要检索您的产品以及产品尺寸,请使用以下内容:

SELECT p.[ProductID], p.[PartNo], p.[CategoryID], p.[MaterialID], p.[WireformID], p.[ProductName],
    ps.[ProductSize], ps.[Length], p.[ProductLength], p.[ProductActive], p.[ProductImage]
FROM [T_Product] p
INNER JOIN [T_ProductSize] ps
ON ps.[ProductSizeId] = p.[ProductSizeId]

如果我对您的理解正确,那么这就是我认为您所追求的。如果没有,那么再解释一下你需要什么,我会再试一次。

于 2012-06-28T11:39:40.303 回答
0

试试这个...

UPDATE  t2
SET     t2.ProductLength = t1.Length
FROM    dbo.T_ProductSize t1
        INNER JOIN dbo.T_Product t2 ON t1.ProductSize = t2.ProductSize
于 2012-06-28T11:52:28.493 回答