我正在开发一个项目,我需要将数据从Excel工作表提取到SQL Server
那个位成功了。现在我的问题是,对于特定的列
叫产品尺寸,我想根据产品尺寸在其他表中更新当前表,我真的很困惑,请帮帮我
请查找表格结构
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
答案 0 :(得分:1)
好的,所以忽略以前的答案,我得到了错误的结束!!
我想要这样的事情:
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中
答案 1 :(得分:0)
您提到了一个外键但是没有包含它的定义。它是在你的例子中的两个表之间吗?如果是这样,哪些列成为关键?产品尺寸是关键吗?如果是这样,那么你的问题没有多大意义,因为两个表中的值都是相同的。
您是否有可能将产品尺寸存储在单独的表中而不是存储在T_Product表中?在那种情况下,然后在T_Product中代替ProductSize,您将需要来自T_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]
如果我理解正确,那么这就是我认为你所追求的。如果没有,那么请再解释一下你需要什么,我会再试一次。
答案 2 :(得分:0)
试试这个......
UPDATE t2
SET t2.ProductLength = t1.Length
FROM dbo.T_ProductSize t1
INNER JOIN dbo.T_Product t2 ON t1.ProductSize = t2.ProductSize