2017-08-29 2 views
1

Je suis encore nouveau aux choses de DB et celui-ci me donne un problème.Mise à jour de SQL dans la table avec le cas

Je normalise ma table et j'en ai créé une nouvelle où [Status] est maintenant FK.

j'ai pu insérer toutes les valeurs de la table d'origine dans la nouvelle, moins le [État]

j'essaie maintenant d'insérer le [Status] à l'aide d'un cas de sélection.

Tentative 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 

Mais il dit seulement 1 ligne est affectée.

Tentative 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 

Celui-ci dit que toutes les lignes sont touchées, mais le [État] est toujours réglé sur null quand je vérifie.

Merci pour toute aide/suggestions

MISE À JOUR:

Alors que les gens me aider, la réponse que j'ai marqué comme une réponse m'a fait comprendre que je devais être faire un UPDATE au lieu de INSERT. Voici mon SQL que j'ai utilisé pour faire ce travail.

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 

Merci à tous ceux qui ont aidé!

+1

Dans le tableau dbo.GESSContact2 ([Status]) sont Là? Puis-je obtenir la définition de la table? Et avez-vous les données comme 5,6,7,8,9 dans la table de statut comme il est utilisé comme une clé étrangère à la table dbo.GESSContact2? – Rakib

+0

J'ai ajouté la table def au message original. Dans la table d'état, (5,6,7,8,9) sont des clés primaires. Dans la table d'origine, ce sont des valeurs de chaîne – Christian4423

+1

J'ai besoin de cette définition [dbo]. [GESSContact2].J'ai juste besoin du nombre de colonnes et de noms de colonnes – Rakib

Répondre

0

je suppose que je l'ai trouvé le problème. Votre id n'est pas nul, vous devrez donc fournir des valeurs incrémentielles pour la colonne id ou vous devrez indiquer la colonne auto increment.

Accédez à sql server management studio. Faites un clic droit sur la table, puis passez en mode conception et sélectionnez l'identité true dans la zone de propriété.

Si vous avez besoin d'aide pour ajouter l'identité suivre celui-ci: Auto increment primary key in SQL Server Management Studio 2012

et utilisation requête suivante pour insérer: nombre de colonnes

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

Ce poste m'a juste fait réaliser que je fais la mauvaise chose. Dans mon OP j'ai dit que j'ai déjà ajouté toutes les colonnes de la table d'origine dans ce nouveau. Je dois faire une mise à jour, pas un insert ... (paume de la main) – Christian4423

1

Cela devrait fonctionner

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

Même résultat qu'avant .. Il est dit que les lignes sont mises à jour mais que le [Status] est toujours nul – Christian4423

+1

avez-vous essayé d'utiliser cette requête dans une console db normale et pas dans le déclencheur ?? – scaisEdge