2017-08-29 44 views
1

我对数据库的东西还是一个新东西,这一个给我一个问题。SQL更新到案例中的表

我正在正常化我的表格,并且我创建了一个新的[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 

但它说,只有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 

这一个说,所有的行会受到影响,但[状态]仍设置为空当我检查。

感谢任何帮助/建议

UPDATE:

虽然人帮助我,我标记为答案的反应让我意识到我需要做的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 

谢谢大家帮助!

+1

在表dbo.GESSContact2([状态])有多少列那里?我可以得到表格定义吗?你是否有状态表中的5,6,7,8,9这样的数据,因为它被用作dbo.GESSContact2表的外键? – Rakib

+0

我将表def添加到原始帖子。在状态表中,(5,6,7,8,9)是主键。在原始表中,它们是字符串值 – Christian4423

+1

我需要此表[dbo]。[GESSContact2]定义。我只需要列数和列名称 – Rakib

回答

0

我想我发现了问题。您的id不为空,因此您必须为id列提供增量值,否则您必须将ID列设为auto increment

转到sql server管理工作室。右键单击表格,然后进入设计模式并从属性区域选择标识为true。

如果你需要一些帮助来添加身份遵循这样一条: 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 
+0

这篇文章让我意识到我在做错事。在我的OP中,我说我已经将原始表中的所有列添加到这个新的列中。我需要做一个更新,而不是插入...(脸掌) – Christian4423

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 
+0

与之前相同的结果。它表示行已更新,但[状态]仍为空 – Christian4423

+1

您是否曾尝试在正常的数据库控制台中使用此查询,没有触发? – scaisEdge