【发布时间】:2023-03-24 16:25:01
【问题描述】:
我对 DB 的东西还是陌生的,这给我带来了一个问题。
我正在规范化我的表,并创建了一个新表,其中 [Status] 现在是 FK。
我能够将原始表中的所有值插入新表中,减去 [Status]
我现在尝试使用选择案例插入 [Status]。
尝试1:
USE [GESS]
GO
DECLARE @int_status int;
SELECT @int_status =
(CASE
WHEN [Status] = 'Alumni' THEN 5
WHEN [Status] = 'Faculty' THEN 6
WHEN [Status] = 'Friend' THEN 7
WHEN [Status] = 'Student' THEN 8
ELSE 9
END)
FROM [dbo].[GESSContact]
INSERT INTO dbo.GESSContact2 ([Status]) VALUES (@int_status)
GO
但它说只有 1 行受到影响。
尝试2:
USE [GESS]
GO
INSERT INTO [dbo].[GESSContact2]([Status])
Select (
CASE
WHEN o.[Status] = 'Alumni' THEN 5
WHEN o.[Status] = 'Faculty' THEN 6
WHEN o.[Status] = 'Friend' THEN 7
WHEN o.[Status] = 'Student' THEN 8
ELSE 9
END) As [Status]
From [dbo].[GESSContact] o
GO
这表示所有行都受到影响,但当我检查时 [Status] 仍然设置为 null。
感谢任何帮助/建议
更新:
当人们帮助我时,我标记为答案的回复让我意识到我需要做一个 UPDATE 而不是 INSERT。这是我用来完成这项工作的 SQL。
USE [GESS]
GO
UPDATE [dbo].[GESSContact2]
SET [dbo].[GESSContact2].[Status] =
CASE
WHEN o.[Status] = 'Alumni' THEN 5
WHEN o.[Status] = 'Faculty' THEN 6
WHEN o.[Status] = 'Friend' THEN 7
WHEN o.[Status] = 'Student' THEN 8
ELSE 9
END
FROM [dbo].[GESSContact2] JOIN [dbo].[GESSContact] o
ON [dbo].[GESSContact2].id = o.id
感谢所有帮助过的人!
【问题讨论】:
-
在表 dbo.GESSContact2 ([Status]) 中有多少列?我可以得到表定义吗?你在状态表中是否有像 5,6,7,8,9 这样的数据,因为它被用作 dbo.GESSContact2 表的外键?
-
我将表格 def 添加到原始帖子中。在状态表中,(5,6,7,8,9) 是主键。在原始表中,它们是字符串值
-
我需要这个表 [dbo].[GESSContact2] 定义。我只需要列数和列名
-
共有50列,命名为[id],[FirstName],[MiddleInitial],[LastName],[MaidenName],[Suffix],[Title],[FullName],[SpouseName], [雇主],[顾问],[状态],[捐助者],[Degree1],[Degree2],[Degree3],[Graduation1],[Graduation2],[Graduation3],[Major],[Minor],[Specialty ],[Address],[AddressSecond],[City],[State],[Zipcode],[Country],[Email],[Phone],[Address2],[Address2Second],[City2],[State2], [Zipcode2],[Country2],[Email2],[Phone2],[Address3],[Address3Second],[City3],[State3],[Zipcode3],[Country3],[Email3],[Phone3],[Confirmed ],[EmailOnly],[通讯],[已故]
标签: sql sql-server select insert case