0
votes

Stockez plusieurs variables dans la variable SQL et utilisez-la pour supprimer des entrées dans une table

Bonjour, je me demandais comment une suppression de valeurs multiples peut être réalisée dans une table.

J'ai une requête suivante: xxx

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.


0 commentaires

3 Réponses :


0
votes

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)


0 commentaires

0
votes

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


0 commentaires

0
votes

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> xxx pre> 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


0 commentaires