Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 11240|Απάντηση: 0

[Πηγή] Οι συνηθισμένες δηλώσεις SQL μπορούν να εκτελεστούν με exec

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 9/2/2015 2:44:30 μ.μ. | | |
1: Οι συνηθισμένες εντολές SQL μπορούν να εκτελεστούν με exec

Επιλέξτε * από το tableName
exec('select * from tableName')
exec sp_executesql N'select * from tableName' -- Σημειώστε ότι πρέπει να προσθέσετε N πριν από τη συμβολοσειρά

2: Όταν χρησιμοποιούνται ονόματα πεδίων, ονόματα πινάκων, ονόματα βάσεων δεδομένων κ.λπ.

δηλώστε @fname varchar(20)
set @fname = 'FiledName'
Επιλέξτε @fname από το tableName -- Σφάλμα, δεν ζητείται σφάλμα, αλλά το αποτέλεσμα είναι μια σταθερή τιμή FiledName, η οποία δεν είναι αυτό που θέλετε.
exec('select ' + @fname + ' from tableName') -- σημειώστε ότι προστίθεται ένα κενό διάστημα στο πλάι του μονού εισαγωγικού πριν και μετά το σύμβολο συν

Φυσικά, μπορείτε επίσης να αλλάξετε τη συμβολοσειρά σε μορφή μεταβλητής
δηλώστε @fname varchar(20)
set @fname = 'FiledName' --Ορίστε το όνομα του πεδίου

δηλώστε @s varchar(1000)
set @s = 'επιλογή ' + @fname + ' από το tableName'
exec(@s) -- επιτυχία
exec sp_executesql @s -- Αυτή η πρόταση θα αναφέρει ένα σφάλμα

δηλώστε @s Nvarchar(1000) -- σημειώστε ότι έχει αλλάξει σε nvarchar(1000) εδώ.
set @s = 'επιλογή ' + @fname + ' από το tableName'
exec(@s) -- επιτυχία
exec sp_executesql @s -- αυτή η πρόταση είναι σωστή

3. Παράμετροι εξόδου
δηλώστε @num int, @sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)

--πώς μπορώ να βάλω το αποτέλεσμα της εκτέλεσης exec σε μια μεταβλητή;

δηλώστε @num int, @sqls nvarchar(4000)
set @sqls='select @a=count(*) από το tableName '
exec sp_executesql @sqls,N'@a int έξοδος',@num έξοδος
Επιλέξτε @num


1: Οι συνηθισμένες εντολές SQL μπορούν να εκτελεστούν με το Exec Παράδειγμα: Επιλέξτε * από το tableName
                Exec('select * from tableName')
                Exec sp_executesql N'select * from tableName' -- Σημειώστε ότι πρέπει να προσθέσετε N πριν από τη συμβολοσειρά

2: Όταν χρησιμοποιούνται ονόματα πεδίων, ονόματα πινάκων, ονόματα βάσεων δεδομένων κ.λπ.

    Σφάλμα: δηλώστε @fname varchar(20)
                set @fname = 'FiledName'
                Επιλέξτε @fname από το tableName -- Σφάλμα, δεν ζητείται σφάλμα, αλλά το αποτέλεσμα είναι μια σταθερή τιμή FiledName, η οποία δεν είναι αυτό που θέλετε.
    Correct: Exec('select ' + @fname + ' from tableName') -- παρατηρήστε την προσθήκη ενός κενού στην πλευρά του μεμονωμένου εισαγωγικού πριν και μετά το σύμβολο συν

    Φυσικά, μπορείτε επίσης να αλλάξετε τη συμβολοσειρά σε μορφή μεταβλητής
                δηλώστε @fname varchar(20)
                set @fname = 'FiledName' --Ορίστε το όνομα του πεδίου

                δηλώστε @s varchar(1000)
                set @s = 'επιλογή ' + @fname + ' από το tableName'
                Exec(@s) -- Επιτυχία
                exec sp_executesql @s -- Αυτή η πρόταση θα αναφέρει ένα σφάλμα

              --Σημείωση: @s παράμετρος πρέπει να είναι τύπου ntext ή nchar ή nvarchar, δηλώστε @s varchar(1000) πρέπει να αλλάξει για να δηλώσετε @s nvarchar(1000)



               Ως εξής:
                δηλώστε @s Nvarchar(1000) -- σημειώστε ότι έχει αλλάξει σε nvarchar(1000) εδώ.

                set @fname = 'FiledName' --Ορίστε το όνομα του πεδίου
                set @s = 'επιλογή ' + @fname + ' από το tableName'
                Exec(@s) -- Επιτυχία   
                exec sp_executesql @s -- αυτή η πρόταση είναι σωστή

3. Παράμετροι εισόδου ή εξόδου

      (1) Παράμετροι εισόδου:
          δηλώστε @QueryString nvarchar(1000) -- δυναμική μεταβλητή δήλωσης ερωτήματος (σημείωση: πρέπει να είναι τύπου ntext ή nchar nvarchar, όχι τύπου varchar)
          declare @paramstring nvarchar(200) - ορίστε τη συμβολοσειρά των παραμέτρων στη δυναμική δήλωση (σημείωση: πρέπει να είναι τύπου ntext ή nchar nvarchar, όχι τύπου varchar)
          declare @input_id int - καθορίζει την τιμή των παραμέτρων που θα μεταβιβαστούν στη δυναμική δήλωση

          ορίστε @QueryString='επιλογή * από όνομα πίνακα όπου id=@id' --id είναι το όνομα του πεδίου, @id είναι η παράμετρος που πρέπει να μεταβιβαστεί
          set @paramstring='@id int' -- Ορίζει τη συμβολοσειρά που ορίζει τις παραμέτρους στη δυναμική πρόταση
          set @input_id =1 -- Ορίστε την τιμή της παραμέτρου που θα μεταβιβαστεί στη δυναμική πρόταση σε 1
          exec sp_executesql @querystring,@paramstring,@id=@input_id
          Εάν υπάρχουν πολλές παράμετροι:
          δηλώστε @QueryString nvarchar(1000) -- δυναμική μεταβλητή δήλωσης ερωτήματος (σημείωση: πρέπει να είναι τύπου ntext ή nchar nvarchar, όχι τύπου varchar)
          declare @paramstring nvarchar(200) - ορίστε τη συμβολοσειρά των παραμέτρων στη δυναμική δήλωση (σημείωση: πρέπει να είναι τύπου ntext ή nchar nvarchar, όχι τύπου varchar)
          declare @input_id int - καθορίζει την τιμή της παραμέτρου που θα μεταβιβαστεί στη δυναμική δήλωση, παράμετρος 1
          declare @input_name varchar(20) - ορίζει την τιμή του ορίσματος που θα περάσει στη δυναμική δήλωση, παράμετρος 2

          ορίστε @QueryString='επιλογή * από όνομα πίνακα όπου id=@id και name=@name' --id και name είναι ονόματα πεδίων και @id και @name είναι οι παράμετροι που πρέπει να μεταβιβαστούν
          set @paramstring='@id int,@name varchar(20)' -- Ορίστε τη συμβολοσειρά του ορισμού των παραμέτρων στη δυναμική δήλωση, διαχωρισμένη με ","
          set @input_id =1 -- Ορίστε την τιμή της παραμέτρου που θα μεταβιβαστεί στη δυναμική πρόταση σε 1
          set @input_name='Zhang San' --Ορίστε την τιμή της παραμέτρου που θα μεταβιβαστεί στη δυναμική δήλωση σε 'Zhang San'
          exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Σημειώστε τη σειρά των ορισμάτων
     (2) Παράμετροι εξόδου
             δηλώστε @num int, @sqls nvarchar(4000)
            set @sqls='select count(*) from tableName'
            exec(@sqls)
        --πώς μπορώ να βάλω το αποτέλεσμα της εκτέλεσης exec σε μια μεταβλητή;         
        δηλώστε @QueryString nvarchar(1000) -- δυναμική μεταβλητή ονόματος ερωτήματος (Σημείωση: πρέπει να είναι τύπου ntext ή nchar nvarchar, όχι τύπου varchar)
        declare @paramstring nvarchar(200) - ορίστε τη συμβολοσειρά των παραμέτρων στη δυναμική δήλωση (σημείωση: πρέπει να είναι τύπου ntext ή nchar nvarchar, όχι τύπου varchar)
        declare @output_result int - το αποτέλεσμα του ερωτήματος εκχωρείται στο @output_result

        set @QueryString='select @totalcount=count(*) from tablename' --@totalcount είναι η παράμετρος εξόδου
        set @paramstring='@totalcount int output' --Ορίστε τη συμβολοσειρά που ορίζεται από τις παραμέτρους της δυναμικής δήλωσης, διαχωρισμένη με ","
        exec sp_executesql @querystring,@paramstring,@totalcount=@output_result έξοδος
        Επιλέξτε @output_result
        Φυσικά, οι παράμετροι εισόδου και εξόδου μπορούν να χρησιμοποιηθούν μαζί, ώστε να μπορείτε να το δοκιμάσετε μόνοι σας.
        Επιπλέον, εάν θέλετε να εξάγετε το σύνολο αποτελεσμάτων του ερωτήματος δυναμικής δήλωσης, σκέφτομαι μόνο την ακόλουθη μέθοδο χρήσης προσωρινών πινάκων, δεν ξέρω αν έχετε καλύτερο τρόπο.
        IF object_id('[tempdb].[ dbo].#tmp') ΔΕΝ ΕΙΝΑΙ NULL -- Προσδιορίστε εάν υπάρχει η προσωρινή #tmp πίνακα και, εάν υπάρχει, διαγράψτε την
            drop table #tmp
        select * στο #tmp από το tablename όπου 1=2 -- Δημιουργήστε έναν προσωρινό πίνακα #tmp με την ίδια δομή με το tablename

        δηλώστε @QueryString nvarchar(1000) -- δυναμική μεταβλητή ονόματος ερωτήματος (Σημείωση: πρέπει να είναι τύπου ntext ή nchar nvarchar, όχι τύπου varchar)
        set @QueryString='Επιλογή * από το όνομα πίνακα '
        Εισάγεται στο #tmp(πεδίο1,πεδίο2,...) exec(@querystirng)




Προηγούμενος:Μέθοδος SQL για το άδειασμα των δεδομένων του πίνακα
Επόμενος:Σημειώσεις SQL από τις τελευταίες ημέρες
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com