Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 11240|Répondre: 0

[Source] Les instructions SQL ordinaires peuvent être exécutées avec exec

[Copié le lien]
Publié sur 09/02/2015 14:44:30 | | |
1 : Les instructions SQL ordinaires peuvent être exécutées avec exec

Sélectionner * depuis tableName
exec('select * depuis tableName')
exec sp_executesql N’select * from tableName' -- Notez que vous devez ajouter N avant la chaîne

2 : Lors de l’utilisation de noms de champs, de tables, de bases de données, etc. comme variables, il faut utiliser du SQL dynamique

déclarez @fname Varchar(20)
set @fname = 'FiledName'
Sélectionnez @fname depuis tableName -- Erreur, aucune erreur n’est demandée, mais le résultat est une valeur fixe FiledName, ce qui n’est pas ce que vous voulez.
exec('select ' + @fname + ' from tableName') -- notez qu’un espace est ajouté sur le côté de la guillemetage avant et après le signe plus

Bien sûr, vous pouvez aussi changer la chaîne en une variable
déclarez @fname Varchar(20)
définir @fname = 'NomEnregistré' --Définir le nom du champ

déclarez @s varchar (1000)
définissez @s = 'select ' + @fname + ' from tableName'
exécutif(@s) -- succès
exécutif sp_executesql @s -- Cette phrase signalera une erreur

déclarez @s Nvarchar(1000) — notez que c’est changé en nvarchar(1000) ici.
définissez @s = 'select ' + @fname + ' from tableName'
exécutif(@s) -- succès
Exécutif sp_executesql @s -- Cette phrase est correcte

3. Paramètres de sortie
déclare @num int, @sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exécutif(@sqls)

--comment puis-je mettre le résultat de l’exécution exécutive dans une variable ?

déclare @num int, @sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exécutif sp_executesql @sqls,N'@a int output',@num output
Sélectionnez @num


1 : Les instructions SQL ordinaires peuvent être exécutées avec Exec Exemple : Sélectionnez * depuis tableName
                Exec('select * depuis tableName')
                Exécutif sp_executesql N’select * from tableName' -- Notez que vous devez ajouter N avant la chaîne

2 : Lors de l’utilisation de noms de champs, de tables, de bases de données, etc. comme variables, il faut utiliser du SQL dynamique

    Erreur : déclarer @fname Varchar(20)
                set @fname = 'FiledName'
                Sélectionnez @fname depuis tableName -- Erreur, aucune erreur n’est demandée, mais le résultat est une valeur fixe FiledName, ce qui n’est pas ce que vous voulez.
    Correct : Exécutif ('select ' + @fname + ' from tableName') — remarquez l’ajout d’un espace sur le côté de la guillemetage avant et après le signe plus

    Bien sûr, vous pouvez aussi changer la chaîne en une variable
                déclarez @fname Varchar(20)
                définir @fname = 'NomEnregistré' --Définir le nom du champ

                déclarez @s varchar (1000)
                définissez @s = 'select ' + @fname + ' from tableName'
                Exécutif(@s) -- Succès
                exécutif sp_executesql @s -- Cette phrase signalera une erreur

              --Note : @s paramètre doit être de type ntext, nchar ou nvarchar, déclarer @s varchar(1000) doit être changé pour déclarer @s nvarchar(1000)



               Voici :
                déclarez @s Nvarchar(1000) — notez que c’est changé en nvarchar(1000) ici.

                définir @fname = 'NomEnregistré' --Définir le nom du champ
                définissez @s = 'select ' + @fname + ' from tableName'
                Exécutif(@s) -- Succès   
                Exécutif sp_executesql @s -- Cette phrase est correcte

3. Paramètres d’entrée ou de sortie

      (1) Paramètres d’entrée :
          Déclare @QueryString nvarchar(1000) -- variable dynamique de requête (note : doit être de type ntext ou nchar nvarchar, pas de type varchar)
          Déclarer @paramstring nvarchar(200) - définir la chaîne de paramètres dans l’instruction dynamique (note : doit être de type ntext ou nchar nvarchar, pas type varchar)
          Déclare @input_id int - définit la valeur des paramètres à passer dans l’instruction dynamique

          Définissez @QueryString='Select * depuis Nametable où id=@id' --id est le nom du champ, @id est le paramètre à passer
          définisse @paramstring='@id int' -- Définit la chaîne qui définit les paramètres dans l’instruction dynamique
          Définissez @input_id = 1 -- Réglez la valeur du paramètre à passer dans l’instruction dynamique à 1
          exécutif sp_executesql @querystring,@paramstring,@id=@input_id
          S’il existe plusieurs paramètres :
          Déclare @QueryString nvarchar(1000) -- variable dynamique de requête (note : doit être de type ntext ou nchar nvarchar, pas de type varchar)
          Déclarer @paramstring nvarchar(200) - définir la chaîne de paramètres dans l’instruction dynamique (note : doit être de type ntext ou nchar nvarchar, pas type varchar)
          Déclare @input_id int - définit la valeur du paramètre à passer dans l’instruction dynamique, paramètre 1
          Déclarez @input_name varchar(20) - définit la valeur de l’argument à passer dans l’énoncé dynamique, paramètre 2

          Définissez @QueryString='Select * from Tablename où id=@id et name=@name' --id et name sont des noms de champs, et @id et @name sont les paramètres à passer
          Définissez @paramstring='@id int,@name varchar(20)' -- Définissez la chaîne de définition des paramètres dans l’instruction dynamique, séparée par « »,
          Définissez @input_id = 1 -- Réglez la valeur du paramètre à passer dans l’instruction dynamique à 1
          définissez @input_name='Zhang San' --Définissez la valeur du paramètre à passer dans l’instruction dynamique sur 'Zhang San'
          exécutif sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Notez l’ordre des arguments
     (2) Paramètres de sortie
             déclare @num int, @sqls nvarchar(4000)
            set @sqls='select count(*) from tableName'
            exécutif(@sqls)
        --comment puis-je mettre le résultat de l’exécution exécutive dans une variable ?         
        déclare @QueryString nvarchar(1000) -- variable de nom de requête dynamique (Note : doit être de type ntext ou nchar nvarchar, pas type varchar)
        Déclarer @paramstring nvarchar(200) - définir la chaîne de paramètres dans l’instruction dynamique (note : doit être de type ntext ou nchar nvarchar, pas type varchar)
        Déclare @output_result int - Le résultat de la requête est attribué au @output_result

        Set @QueryString='Select @totalcount=count(*) from tablename' --@totalcount est le paramètre de sortie
        Définissez @paramstring='@totalcount int output' --Définissez la chaîne définie par les paramètres dans l’instruction dynamique, séparés par « »,
        exécutif sp_executesql @querystring,@paramstring,@totalcount=@output_result sortie
        Sélectionnez @output_result
        Bien sûr, les paramètres d’entrée et de sortie peuvent être utilisés ensemble, donc vous pouvez essayer vous-même.
        De plus, si vous voulez produire l’ensemble de résultats d’une requête dynamique, je ne pense qu’à la méthode suivante : utiliser des tables temporaires, je ne sais pas si vous avez une meilleure méthode.
        SI object_id('[tempdb].[ dbo].#tmp') N’EST PAS NUL -- Déterminez si la #tmp de table temporaire existe, et si elle existe, supprimez-la
            #tmp de la table de déplacement
        sélectionner * dans #tmp à partir de nom de table où 1=2 -- Créer un #tmp temporaire de table avec la même structure que le nom de table

        déclare @QueryString nvarchar(1000) -- variable de nom de requête dynamique (Note : doit être de type ntext ou nchar nvarchar, pas type varchar)
        Set @QueryString='Select * from Table Name '
        insérer dans #tmp(field1,field2,...) exec(@querystirng)




Précédent:Méthode SQL pour vider les données de tables
Prochain:Notes SQL des derniers jours
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com