Bonjour, je me demandais comment une suppression de valeurs multiples peut être réalisée dans une table.
J'ai une requête suivante: p> résumer Pour supprimer la relation de plusieurs sous-officiers, mais il existe plusieurs sous-employés qui sont liés à la famille d'emplois principaux et que je reçois une erreur lors de la conservation de la variable - @subjob. Toute aide serait appréciée. p> p>
3 Réponses :
Vous ne pouvez pas stocker plusieurs valeurs à une variable scalaire, vous devez avoir un type de table pour stocker les différentes valeurs.
Vous pouvez essayer comme suit à l'aide d'une table temporaire. P>
declare @subjob nvarchar(100)
Il existe deux types de variables dans SQL Server - il existe des variables scalaires (tous les types de données intégrés sont des variables scalaires) et il y a des variables de table. Vous pouvez déclarer une variable de table soit à l'aide d'un type de table défini par l'utilisateur car c'est son type, soit en la spécifiant comme une table avec toutes les colonnes.
Supposons que vous ayez un UDT comme celui-ci: P>
BEGIN TRANSACTION BEGIN TRY DELETE FROM dbo.MainJobs WHERE @MainJobId =IDKey DELETE dbo.Relationship1 WHERE SubJobs IN ( SELECT SubJobFamily FROM dbo.Jobz WHERE JobFamily = @MainJobId ) DELETE FROM dbo.Jobz WHERE JobFamily = @MainJobId END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION END CATCH IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION
Ceci serait effectué en 2 étapes.
Créez d'abord un ensemble de votre identifiant requis dans la chaîne séparée des virgules, puis sur la base de chaque valeur de la chaîne Supprimer votre enregistrement entier des tables de référence. P> Pour créer une chaîne séparée par des virgules, vous pouvez utiliser 'Stuff' i> ou 'i>' coalesce ' i>. p> Une autre option est utilisée du curseur pour récupérer chaque enregistrement en boucle et effectuer votre action requise à partir de cet enregistrement. P> DELETE FROM dbo.MainJobs WHERE @MainJobId =IDKey
declare @subjob nvarchar;
----- use cursor over there to get each record one by one on SELECT SubJobFamily FROM dbo.Jobz where JobFamily = @MainJobId
SET @subjob = (SELECT SubJobFamily FROM dbo.Jobz where JobFamily = @MainJobId ) --has mutiple values in the table
Delete dbo.Jobz where JobFamily = @MainJobId
DELETE dbo.Relationship1 where SubJobs = @subjob --deletion of multiple rows