2017-08-29 80 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