我还是DB的新手,这个问题给了我一个问题。
我正在规范我的桌子,我创建了一个新的,其中[Status]现在是FK。
我能够将原始表格中的所有值插入到新表格中,减去[状态]
我现在正尝试使用选择案例插入[状态]。
尝试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
但它说只有一行受到影响。
尝试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
感谢所有帮助过的人!
答案 0 :(得分:1)
这应该有效
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
From [dbo].[GESSContact] o
答案 1 :(得分:0)
id
不为空,因此您必须为id
列提供增量值,否则您必须创建ID列auto increment
。
转到sql server management studio。右键单击表格,然后转到设计模式,并从属性区域中选择标识为真。
如果您需要一些帮助来添加身份,请按以下步骤操作: Auto increment primary key in SQL Server Management Studio 2012
并使用以下查询插入:
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
From [dbo].[GESSContact] o