SQL Update进入表格大小写

时间:2017-08-29 16:21:36

标签: sql sql-server select insert case

我还是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

感谢所有帮助过的人!

2 个答案:

答案 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