Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 11240|Jawab: 0

[Sumber] Pernyataan SQL biasa dapat dieksekusi dengan exec

[Salin tautan]
Diposting pada 09/02/2015 14.44.30 | | |
1: Pernyataan SQL biasa dapat dieksekusi dengan exec

Pilih * dari tableName
exec('pilih * dari tableName')
exec sp_executesql N'select * from tableName' -- Perhatikan bahwa Anda harus menambahkan N sebelum string

2: Saat menggunakan nama bidang, nama tabel, nama database, dll. sebagai variabel, SQL dinamis harus digunakan

Menyatakan @fname varchar(20)
set @fname = 'FiledName'
Pilih @fname dari tableName -- Kesalahan, tidak ada kesalahan yang diminta, tetapi hasilnya adalah nilai tetap FiledName, yang bukan yang Anda inginkan.
exec('select ' + @fname + ' from tableName') -- perhatikan bahwa spasi ditambahkan ke sisi tanda kutip tunggal sebelum dan sesudah tanda tambah

Tentu saja, Anda juga dapat mengubah string menjadi bentuk variabel
Menyatakan @fname varchar(20)
set @fname = 'FiledName' --Atur nama bidang

Menyatakan @s varchar(1000)
set @s = 'pilih ' + @fname + ' dari tableName'
Exec(@s) -- Sukses
exec sp_executesql @s -- Kalimat ini akan melaporkan kesalahan

deklarasi @s Nvarchar(1000) -- perhatikan bahwa itu diubah menjadi nvarchar(1000) di sini.
set @s = 'pilih ' + @fname + ' dari tableName'
Exec(@s) -- Sukses
exec sp_executesql @s -- kalimat ini benar

3. Parameter keluaran
Deklarasikan @num INT, @sqls NVARCHAR(4000)
set @sqls='select count(*) dari tableName'
eksekutif (@sqls)

--bagaimana cara memasukkan hasil eksekusi eksekutif ke dalam variabel?

Deklarasikan @num INT, @sqls NVARCHAR(4000)
set @sqls='pilih @a=count(*) dari tableName '
keluaran exec sp_executesql @sqls,N'@a int output',@num
Pilih @num


1: Pernyataan SQL biasa dapat dijalankan dengan Exec Contoh: Pilih * dari tableName
                Exec('pilih * dari tableName')
                Exec sp_executesql N'select * from tableName' -- Perhatikan bahwa Anda harus menambahkan N sebelum string

2: Saat menggunakan nama bidang, nama tabel, nama database, dll. sebagai variabel, SQL dinamis harus digunakan

    Kesalahan: deklarasikan @fname varchar(20)
                set @fname = 'FiledName'
                Pilih @fname dari tableName -- Kesalahan, tidak ada kesalahan yang diminta, tetapi hasilnya adalah nilai tetap FiledName, yang bukan yang Anda inginkan.
    Benar: Exec('select ' + @fname + ' from tableName') -- perhatikan penambahan spasi ke sisi kutipan tunggal sebelum dan sesudah tanda tambah

    Tentu saja, Anda juga dapat mengubah string menjadi bentuk variabel
                Menyatakan @fname varchar(20)
                set @fname = 'FiledName' --Atur nama bidang

                Menyatakan @s varchar(1000)
                set @s = 'pilih ' + @fname + ' dari tableName'
                Exec(@s) -- Keberhasilan
                exec sp_executesql @s -- Kalimat ini akan melaporkan kesalahan

              --Catatan: Parameter @s harus dari tipe ntext atau nchar atau nvarchar, deklarasikan @s varchar(1000) harus diubah untuk mendeklarasikan @s nvarchar(1000)



               Sebagai berikut:
                deklarasi @s Nvarchar(1000) -- perhatikan bahwa itu diubah menjadi nvarchar(1000) di sini.

                set @fname = 'FiledName' --Atur nama bidang
                set @s = 'pilih ' + @fname + ' dari tableName'
                Exec(@s) -- Keberhasilan   
                exec sp_executesql @s -- kalimat ini benar

3. Parameter input atau output

      (1) Parameter masukan:
          Deklarasikan @QueryString nvarchar(1000) -- variabel pernyataan kueri dinamis (catatan: harus jenis ntext atau nchar nvarchar, bukan tipe varchar)
          Deklarasikan @paramstring nvarchar(200) - atur string parameter dalam pernyataan dinamis (catatan: harus jenis ntext atau nchar nvarchar, bukan tipe varchar)
          deklarasikan @input_id int - mendefinisikan nilai parameter yang akan diteruskan ke dalam pernyataan dinamis

          set @QueryString='pilih * dari nama tabel di mana id=@id' --id adalah nama bidang, @id adalah parameter yang akan diteruskan
          set @paramstring='@id int' -- Mengatur string yang menentukan parameter dalam pernyataan dinamis
          set @input_id =1 -- Atur nilai parameter yang akan diteruskan dalam pernyataan dinamis ke 1
          eksekutif sp_executesql @querystring,@paramstring,@id=@input_id
          Jika ada beberapa parameter:
          Deklarasikan @QueryString nvarchar(1000) -- variabel pernyataan kueri dinamis (catatan: harus jenis ntext atau nchar nvarchar, bukan tipe varchar)
          Deklarasikan @paramstring nvarchar(200) - atur string parameter dalam pernyataan dinamis (catatan: harus jenis ntext atau nchar nvarchar, bukan tipe varchar)
          deklarasikan @input_id int - menentukan nilai parameter yang akan diteruskan ke dalam pernyataan dinamis, parameter 1
          Deklarasi @input_name varchar(20) - mendefinisikan nilai argumen yang akan diteruskan ke dalam pernyataan dinamis, parameter 2

          set @QueryString='select * from tablename where id=@id and name=@name' --id dan name adalah nama bidang, dan @id dan @name adalah parameter yang akan diteruskan
          set @paramstring='@id int,@name varchar(20)' -- Atur string definisi parameter dalam pernyataan dinamis, dipisahkan oleh ","
          set @input_id =1 -- Atur nilai parameter yang akan diteruskan dalam pernyataan dinamis ke 1
          set @input_name='Zhang San' --Atur nilai parameter yang akan diteruskan dalam pernyataan dinamis ke 'Zhang San'
          exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Perhatikan urutan argumen
     (2) Parameter keluaran
             Deklarasikan @num INT, @sqls NVARCHAR(4000)
            set @sqls='select count(*) dari tableName'
            eksekutif (@sqls)
        --bagaimana cara memasukkan hasil eksekusi eksekutif ke dalam variabel?         
        declare @QueryString nvarchar(1000) -- variabel nama kueri dinamis (Catatan: harus jenis ntext atau nchar nvarchar, bukan tipe varchar)
        Deklarasikan @paramstring nvarchar(200) - atur string parameter dalam pernyataan dinamis (catatan: harus jenis ntext atau nchar nvarchar, bukan tipe varchar)
        deklarasikan @output_result int - hasil kueri ditetapkan ke @output_result

        set @QueryString='select @totalcount=count(*) from tablename' --@totalcount adalah parameter keluaran
        set @paramstring='@totalcount int output' --Atur string yang ditentukan oleh parameter dalam pernyataan dinamis, dipisahkan oleh ","
        keluaran eksekutif sp_executesql @querystring,@paramstring,@totalcount=@output_result
        Pilih @output_result
        Tentu saja, parameter input dan output dapat digunakan bersama-sama, sehingga Anda dapat mencobanya sendiri.
        Selain itu, jika Anda ingin mengeluarkan kumpulan hasil kueri pernyataan dinamis, saya hanya memikirkan metode berikut untuk menggunakan tabel sementara, saya tidak tahu apakah Anda memiliki cara yang lebih baik.
        JIKA object_id('[tempdb].[ dbo].#tmp') IS NOT NULL -- Menentukan apakah tabel sementara #tmp ada, dan jika ada, hapus
            Drop Table #tmp
        pilih * ke #tmp dari nama tabel di mana 1=2 -- Buat tabel sementara #tmp dengan struktur yang sama dengan nama tabel

        declare @QueryString nvarchar(1000) -- variabel nama kueri dinamis (Catatan: harus jenis ntext atau nchar nvarchar, bukan tipe varchar)
        set @QueryString='pilih * dari nama tabel '
        Masukkan ke dalam #tmp(bidang1,bidang2,...) eksekutif(@querystirng)




Mantan:Metode SQL untuk mengosongkan data tabel
Depan:Catatan SQL dari beberapa hari terakhir
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com