Pembuatan prosedur SQL yang akan disimpan. Jenis prosedur yang disimpan. Manajemen hak akses Gnuchka

22 episode

Pengetahuan saya tentang menulis di program utama WinForms Client/Server sederhana, yang saya datangi:

Prosedur Vykoristovuvat yang ditangani:

  • Untuk menjadi pekerja robot yang dapat dilipat. Jika Anda memilih untuk bekerja, Anda akan secara efektif membutuhkan kursor tabel atau temp, jadi panggil cara terbaik untuk menjalankannya di SQL Server.
  • Anda mungkin perlu memblokir akses ke data. Jika Anda tidak memberikan akses ke tabel coristuvachas (atau peran atau apa pun), Anda dapat diyakinkan bahwa satu-satunya cara untuk berinteraksi dengan mereka adalah melalui usaha patungan, yang dibuat.

Kemenangan untuk permintaan khusus:

  • Untuk CRUD, jika Anda tidak perlu menjembatani akses ke data (lakukan sebaliknya).
  • Untuk lelucon paling sederhana. Penciptaan SP untuk kriteria impersonal untuk lelucon - hanya itu yang terlipat dalam layanan. Jika Anda dapat membuat permintaan poke swedia, kedipkan mata.

Untuk sebagian besar penambahan saya, saya menang seperti SP, jadi sql ad-hoc, saya ingin tahu bahwa saya memiliki SP vicorist yang semakin sedikit, pecahan stink di kantong akhir dengan kode seperti C #, hanya lebih banyak kontrol, tes dan memperbaiki. Saya merekomendasikan bi-wiring ad-hoc sql karena Anda tidak tahu alasan spesifiknya.

Menyimpan prosedur - kontrak pada program keamanan, yang merangkumnya, langsung dengan basis data. Kode untuk prosedur dan skema database dapat diubah tanpa kompilasi, mengembangkan kode, sehingga input dari prosedur dibiarkan tidak berubah.

Ketika Anda menanyakan program Anda, Anda akan dengan jelas memberi tahu diri Anda sendiri tentang model data Anda.

Yah, itu juga bukan praktik yang baik untuk hanya membuat prosedur penyimpanan, seperti permintaan CRUD untuk tabel kulit di database Anda, jadi ini lebih terkait erat. Sifat prosedurnya adalah karena besar, berbutir kasar.

Saya pikir ini adalah konflik utama antara orang-orang, karena itu adalah kesalahan mereka untuk meningkatkan basis data orang, karena untuk memperluas antarmuka koresponden.

Sebagai orang yang memiliki data, saya tidak melihat pekerjaan di balik basis data, sebelum mereka melalui permintaan adhoc, jadi penting bagi mereka untuk belajar atau peduli secara efektif. Bagaimana saya dapat mengetahui apa yang dapat saya sumbangkan untuk mengubah skema? Selain itu, saya tidak berpikir bahwa coristovats harus diberikan akses langsung ke tabel database dengan keamanan mirroring (dan saya tidak hanya dapat menyerang injeksi SQL, tetapi juga fakta bahwa kontrol internal dasar, yang tidak mengizinkan hak langsung dan vimagaє vіd usіh koristuvachіv vikoristovyte hanya procs, diakui untuk program, schob zapobіgti mozhlivogo shahraystvo.

Basis data berorientasi objek, dan kode yang terlihat bagus dari sudut pandang berorientasi objek dapat benar-benar hancur dari sudut pandang basis data.

Pengecer kami mengingatkan kami, untuk itu, bahwa semua akses kami ke database dibuat melalui procs, sehingga kami akan secara signifikan mempercepat koreksi pengampunan, sehingga terletak pada data, dan kemudian hanya menjalankan proc dalam pekerjaan lingkungan, dan tidak membuat kode baru dan mengkompilasi ulang dan memanfaatkan kembali di virobnitstvo. Kami percaya bahwa semua proses kami ada di tangan pengemudi, jadi kontrol dzherel tidak menjadi masalah sama sekali. Meskipun wine tidak dalam Subversion, dbas wine terlihat secara berkala, dan tidak ada dukungan untuk Kontrol Sumber.

Menyimpan prosedur, gila-gilaan, datang ... bau dikompilasi, melemparkan rencana sebelum tongkol pekerjaan, dan Anda dapat menghargai hak mereka.

Saya tidak mengerti masalah dengan kode keluar pada prosedur yang sedang disimpan. Anda dapat dengan mudah mengontrol mereka, bahkan jika Anda memiliki sedikit disiplin.

Selalu mulai dari file .sql, yang merupakan inti dari prosedur untuk menyimpan. Post yogo di keruvannya dengan versi setelah Anda menulis kode. Lain kali, jika Anda ingin mengubah prosedur Anda, apa yang disimpan, Anda akan mengambil elemen kontrol eksternal Anda sendiri, di bawah basis data Anda. Jika Anda mengikuti ini, Anda akan memiliki manajemen yang sama baik dengan kode Anda.

Saya ingin mengutip Tom Kyte dari Oracle di sini... Ini adalah aturan tentang penulisan kode... meskipun itu sedikit tidak cocok, tapi saya rasa saya lebih tahu.

Addendum kami memiliki bola kode, yang dapat kami gunakan untuk bertanya (dan terkadang kami membutuhkan prosedur yang disimpan). Tse memungkinkan kita:

  • gampang otrimat semua tanya pіd jam versi keruvannya
  • robiti semua perubahan untuk perawatan kulit untuk berbagai server database
  • termasuk pengulangan kode yang sama melalui kode kami

Kontrol akses diimplementasikan di bola tengah, dan bukan di database, jadi kami tidak memerlukan prosedur yang disimpan. Seluruh dunia adalah jalan tengah antara permintaan khusus dan prosedur yang diurus.

Penting untuk mengubah argumen untuk kedua prosedur, yang disimpan sebagai di repositori pusat, tetapi (berpotensi) penting untuk ditransfer, dan spesialisasi lebih mudah ditemukan, stink shard dengan kode Anda, tetapi stinks juga bisa lebih dikenal dalam kode.

Argumen bahwa prosedur yang disimpan lebih efektif, jangan balas dendam lagi. teks terkirim

Saran Google untuk prosedur yang diambil vs Dynamic Query akan menunjukkan kepada Anda beberapa argumen dalam hal apa pun dan, lebih baik bagi Anda untuk menerima keputusan Anda sendiri.

Deyakі rechі, tentang yaki perlu dipikirkan: Siapa yang butuh prosedur, apa yang mereka simpan, Omong-omong?

Jelas bahwa makanan untuk kebutuhan energi Anda itu penting, tetapi bahkan lebih penting untuk memikirkan makanan yang, dengan minuman paling istimewa di tengah, berorientasi pada jumlah besar, aman. Waspadalah terhadap parameterisasi Anda dan ikuti inkonsistensi tipikal seperti injeksi SQL.

Menyimpan prosedur adalah keajaiban, karena dapat diubah tanpa kompilasi ulang. Saya akan mencoba untuk memenangkan mereka sebanyak mungkin.

Saya ad-hoc perwakilan untuk minuman, yang dihasilkan secara dinamis berdasarkan pengenalan coristuvach.

Procs untuk alasan lain, dan juga lebih mudah untuk meningkatkan proc untuk profil tambahan atau bagian dari proc. Di peringkat ini, Anda tidak perlu memberi tahu siapa pun tentang peluncuran program Anda, untuk mengetahui apa yang dikirim ke server SQL

Jika Anda ingin bertanya ad-hoc, berubah pikiran bahwa mereka parametrized

Parameterisasi SQL atau SPROC... tidak terlalu berpengaruh dalam hal kinerja... Anda dapat meminta pengoptimalan salah satunya.

Bagi saya, sisa keuntungan SPROC adalah saya dapat mematikan banyak hak untuk mengelola hak SQL, berikan saja hak saya untuk masuk ke sprocs ... sehingga Anda dapat memenangkan SQL Parametized, masuk, mengikat ke baris koneksi Anda , mungkin lebih (catatan dari semua jenis operator untuk dipilih pada salah satu tabel, yang mereka miliki aksesnya, misalnya).

Seperti sebelumnya, saya telah menyukai SQL berparameter, ingin ...

Argumen sproc produktivitas spirnim - 3 RDBM atas memenangkan kembali rencana untuk minum dan jam harian. Yogo didokumentasikan... Apa itu 1995?

Namun, implementasi SQL dalam program Anda juga merupakan desain yang buruk - pemeliharaan kode, mungkin bukan konsep yang cukup baik untuk orang kaya.

Demikian juga, program dapat mulai dari awal untuk ORM tambahan (tambahan dari lapangan hijau jauh dari kіlkoh!), tse vіdminny vibrіr, model oskіlki kelas Anda keruє model DB Anda yang hanya satu jam.

Karena struktur ORM tidak tersedia, kami telah meretas pidhide hibrid untuk membuat file XML sumber daya SQL untuk meminta baris SQL yang diperlukan (bau busuk kemudian di-cache oleh infrastruktur sumber daya). Sama seperti SQL akan memerlukan beberapa manipulasi kecil yang berbeda dari kode, itu juga akan memerlukan manipulasi besar dari deretan SQL, yang kami pikirkan kembali.

Pidkhid hybrid ini memudahkan untuk mengelola pengecer (mungkin, jika saya lebih kecil, pecahan tim saya dapat dibersihkan, sehingga saya dapat membaca rencana permintaan), dan laring hanyalah verifikasi ulang SVN. Selain itu, saya akan meminta Anda untuk mengganti RDBM - cukup ganti file sumber daya SQL (tidak sesederhana alat ORM, tentu saja, tetapi berfungsi dengan sistem lama atau basis data, yang tidak didukung)

Pendapat saya adalah bahwa 90% dari permintaan dan/atau prosedur yang disimpan tidak bertanggung jawab untuk membuat janji (diterima, secara manual).

Akses ke data dapat dibuat secara otomatis. Anda dapat memilih apakah Anda ingin membuat prosedur secara statis pada waktu kompilasi atau secara dinamis pada waktu pembuatan, atau jika Anda ingin menambahkan kolom ke tabel (otoritas objek), Anda hanya perlu mengubah satu file.

Saya akan menyimpan semua data mengakses kode program, dalam hal ini akses ke data dapat diperoleh langsung dari permintaan SQL. Dari sisi lain, logika pengelolaan, seperti yang saya tempatkan di database saat melihat pemicu, prosedur penyimpanan, fungsi inti, dan banyak lagi. Contoh fakta bahwa saya menghormati tanggal basis data, dan pembuatan data - dapat diterima bahwa klien kami dapat memiliki FirstName dan LastName. Sekarang untuk antarmuka koristuvach, DisplayName diperlukan, seperti yang muncul dari beberapa logika non-sepele. Untuk generasi ini, saya membuat prosedur yang disimpan, kemudian akan diluncurkan oleh pemicu setiap kali baris diperbarui (jika tidak, data lain).

Tampaknya ada sesuatu yang lebih tidak dapat dipahami, bahwa akses ke data sama dengan basis data, dan segala sesuatu yang layak untuk mengakses data, data itu sendiri, ada di sana. Itu salah, tetapi saya menjalankan banyak proyek, seperti berteriak-teriak kehabisan ide. Mungkin seluruh fenomena lokal.

Di depan siklus ini, dunia melihat bagaimana mungkin untuk menarik data dari tabel, memodifikasi strukturnya, membuat, memodifikasi dan melihat basis data dan objek yang tersembunyi di dalamnya. Pada artikel ini, kita akan berbicara lebih banyak tentang objek yang khas untuk DBMS server: notifikasi, pemicu, dan prosedur yang disimpan.

Dalam artikel pertama dari siklus ini, yang diterbitkan dalam jurnal kami No. 3'2000, kami menunjukkan bahwa sebagian besar DBMS server saat ini mendukung pemberitahuan, pemicu, dan prosedur yang disimpan. Penampilan juga didukung oleh bugatma DBMS, misalnya Access, dBase, Clipper.

Tentukan bahwa pemicu dan prosedur yang disimpan harus ditulis dalam bahasa pemrograman, yang merupakan ekstensi prosedural dari bahasa SQL. Pernyataan yang diperluas memungkinkan Anda untuk mendeskripsikan algoritme, misalnya, do… while, if…then…else, digunakan dalam bahasa SQL itu sendiri . Pada vіdmіnu od MTIE SQL, pіdporyadkovuєtsya Scho standar Yogo protsedurnі rozshirennya nіyak tidak standartizovanі, saya rіznі basis data vikoristovuyut rіznі sintaksichnі konstruktsії realіzatsії untuk menenangkan diri algoritmіchnih konstruktsіy, ale, dinegosiasikan vіdmіnnostey di sintaksisі rozshiren SQL database untuk rіznih vihodit luar stattі tsієї.

Untuk mengilustrasikan bagaimana mungkin untuk memenangkan tampilan, pemicu dan prosedur yang disimpan, kami memilih Microsoft SQL Server 7.0 dan database NorthWind, yang disertakan sebelum set pengiriman DBMS.

Pertama-tama, terapkan, hormati mereka yang menerapkan dan menyimpan pemicu dan prosedur yang menang di DBMS, dapat dianggap menunjuk pada statistik ini. Selain itu, untuk pembuatan objek server, ibu berikut diizinkan, seolah-olah administrator basis data diberikan.

Penting juga bahwa beberapa driver ODBC tidak mendukung siklus prosedur, yang disimpan dari addenda klien, tetapi begitulah cara DBMS itu sendiri mendukungnya. Prote dengan cara yang sama seperti prosedur yang disimpan, sedini mungkin, dapat dihilangkan dari pemicu.

Mari kita lihat faktanya, lalu bahas prosedur yang disimpan, dan akhiri dengan melihat pemicunya.

Penampilan

Pengajuan - tse tabel virtual, membunyikan jumlah kolom dari salah satu jumlah tabel. Tidak ada data nyata, hanya kueri SQL dari tipe SELECT, yang menunjukkan data yang sama dan dari tabel mana yang perlu diambil saat kembali ke representasi pertama. Z ts point zoru yavlennya - tse ask, scho zberіgaєtsya.

Sebagian besar vipadkiv disajikan dengan kemenangan untuk keamanan data. Misalnya, diakon dari kategori coristuvachiv dapat diakses sebelum mereka muncul, tetapi tidak dalam tabel, mereka dapat membentuk data; Selain itu, query SQL dapat mengatur parameter USER (nama, di mana koristuvach terdaftar), dan dalam hal ini data yang tersedia saat Anda kembali ke tanggal akan jatuh di bawah nama koristuvach tersebut.

Di bawah ini adalah karakteristik utama dari manifestasi:

  • yavlennya berperilaku seperti meja;
  • dimanifestasikan untuk tidak membalas data;
  • Kiriman dapat memenangkan lebih banyak data dari tabel yang sama.

Untuk membuat tampilan, kita dapat men-tweak proposisi SQL CREATE VIEW, memodifikasinya dengan proposisi ALTER VIEW, dan menghapusnya dengan proposisi DROP VIEW.

Mari kita lihat pernyataan CREATE VIEW, yang memungkinkan Anda membuat tampilan untuk database streaming.

BUAT TAMPILAN proposisi

Sintaks proposisi untuk pembuatan pernyataan menebak proposisi SQL SELECT dengan sejumlah kata kunci tambahan. Di bawah ini adalah sintaks sederhana:

BUAT VIEW view_name SEBAGAI pernyataan_pilihan

Argumen view_name menentukan nama tampilan. Kata kunci, yang cocok di Microsoft SQL Server, memungkinkan Anda untuk melampirkan teks asli dari proposisi CREATE VIEW ke tabel syscomments.

Kata kunci AS menunjukkan kueri SELECT mana yang benar-benar berlaku saat kembali sebelum mengajukan. Perhatian bahwa permintaan tidak dapat mengganti kata kunci ORDER BY, COMPUTE atau COMPUTE BY, INTO dan tidak dapat merujuk ke tabel waktu.

Untuk mengubah pernyataan yang dibuat sebelumnya, ikuti proposisi ALTER VIEW, seperti yang dijelaskan di bagian ofensif.

DROP VIEW proposisi

Tsya proposisi vikoristovuєtsya untuk vydalannya vyavlennya z da nih. Beri hormat kepada mereka yang, ketika tabel dilihat dari basis data, terlihat semua pernyataan yang merujuk padanya. Proposisi Vikoristovuyuchi tsyu, kami bersalah karena mengatakan im'ya vyavlennya, scho terlihat. Setelah dilihat, semua informasi tentang yang baru dilihat dari tabel sistem.

Satu hal lagi, jika Anda perlu melihatnya, Anda dapat menyalahkan pikiran Anda bahwa struktur tabel, yang menjadi dasarnya, berubah setelah penciptaan fenomena tersebut. Dengan tampilan ini, Anda dapat melihat vistava dan membuatnya lagi untuk proposisi tambahan CREATE VIEW.

Penciptaan dan manifestasi vikoristannya

Proposisi CREATE VIEW digunakan untuk membuat pernyataan yang memungkinkan Anda mengubah data, seolah-olah akan diberikan kepada penyanyi. Kiriman dibuat di basis data saat ini dan dikumpulkan sebagai objek.

Cara terbaik untuk membuat tampilan adalah dengan membuat kueri SELECT dan, setelah salah mengartikannya, tambahkan bagian yang hilang dari proposisi CREATE VIEW. Mari kita lihat teks keluaran dari deklarasi Products by Category di database NorthWind (Listing 1).

Baris pertama, dalam huruf tebal, adalah tempat proposisi SQL digunakan untuk membuat pernyataan SELECT, yang memenangkan robot atas pilihan data. Klausa SELECT untuk diterapkan ke data ini memilih bidang dari dua tabel - bidang CategoryName dari tabel CATEGORIES dan bidang ProductName, QuantityPerUnit, UnitsInStock, Dihentikan dari tabel PRODUCTS. Setelah data ini, dua tabel ditautkan oleh bidang CategoryID, dan hanya produk yang tersedia (kriteria div. setelah kata kunci WHERE) yang disertakan dalam kumpulan data yang dihasilkan. Hasil pengembalian ke pengajuan pertama ditunjukkan pada gambar. satu .

Sekarang mari kita membuat pernyataan, seolah-olah menunjukkan semua wilayah dari wilayah yang sama. Tujuan presentasi adalah untuk keluar dari serangan (Daftar 2).

Setelah mengacaukan fakta bahwa proposisi SELECT memutar hasil sesuai kebutuhan, kami menambahkan pernyataan CREATE VIEW dan menetapkan nama EASTTERR, yang dibuat (Daftar 3).

Alih-alih membuat teks yang dikirimkan secara manual, Anda dapat menggunakan alat visual untuk memasuki gudang DBMS. pada gambar. Gambar 2 menunjukkan bagaimana aplikasi yang sama dapat dibuat di belakang alat View Designer tambahan, yang merupakan bagian gudang dari Enterprise Manager, yang ada sebelum Microsoft SQL Server.

Bagian atas View Designer memungkinkan Anda untuk menentukan bagaimana tabel terikat dan bidang mana yang ditampilkan dalam data. Di bawah ini Anda dapat memasukkan tabel dan bidang pseudonim, substitusi nilainya, metode tampilan. Dalі meletakkan teks terakhir dari notifikasi dan hasil yogo vikonannya.

Pertama, izinkan saya menyelesaikan tinjauan singkat, kita akan berbicara sedikit tentang itu, bagaimana mengambil informasi tambahan tentang mereka. Di Microsoft SQL Server 7.0, kita dapat mengubah prosedur sistem berikut yang disimpan:

  • Untuk mengambil informasi tentang pengajuan, Anda dapat menggunakan prosedur sistem sp_help. Misalnya, sp_help EastTerr untuk membalikkan keadaan tentang kejadian tersebut;
  • untuk mengedit teks input, Anda dapat mengubah prosedur sp_helptext, yang disimpan;
  • untuk mengetahui daftar tabel untuk menyimpan representasi, Anda dapat menggunakan prosedur sistem sp_depends;
  • untuk mengganti nama pernyataan, Anda dapat mengubah prosedur sistem sp_rename, yang disimpan.

Kami telah melihat siapa yang kami bagi, bagaimana memenangkan bukti untuk penghapusan data, bagaimana memenuhi ini dan kriteria lainnya. Mari kita beralih ke sisa pantat. Di basis data NorthWind ada beberapa wilayah, dan untuk pemilihan daftar wilayah dari wilayah yang dipilih, kami memerlukan beberapa deklarasi yang berbeda. Tugas dapat dimaafkan, yakbee bisa saja melewati nilai RegionID sebagai parameter. Dimungkinkan untuk bekerja untuk prosedur tambahan, apa yang harus diurus, yang akan kita bicarakan di divisi ofensif.

Menyimpan prosedur

Prosedur yang disimpan adalah kompilasi dari satu set proposisi SQL, tabungan dalam database sebagai penamaan objek dan penggabungan sebagai fragmen kode tunggal. Menyimpan prosedur dapat menerima dan memutar parameter. Jika Anda membuat prosedur yang disimpan, server mengkompilasinya dan menempatkannya di cache, yang didistribusikan, setelah itu kode kompilasi dapat diblokir oleh decals. Jika program mengalahkan prosedur yang akan disimpan, ia melewati parameter sesuai kebutuhan, dan server memenangkan prosedur tanpa kompilasi ulang.

Menyimpan prosedur memungkinkan Anda untuk meningkatkan produktivitas program. Pertama-tama, permintaan SQL porіvnjano z yang cukup besar, yang dipaksakan dari adendum klien, stink membutuhkan waktu kurang dari satu jam untuk mempersiapkan sebelum akhir, stink dari stink sudah dikompilasi dan disimpan. Di sisi lain, lebih sedikit lalu lintas juga lebih sedikit dalam waktu, lebih sedikit saat transfer kueri SQL, lebih sedikit jumlah data yang ditransmisikan dalam tautan. Beras. 3 prosedur mingguan ilustratif, yang diambil oleh adendum klien.

Prosedur penyimpanan dikompilasi ulang secara otomatis, seolah-olah dengan benda-benda, menuangkan bau busuk ke dalamnya, zrobleno be-yaki berubah; nakshe kazhuchi, bau zavzhdi sebenarnya. Seperti yang telah disebutkan di atas, prosedur yang disimpan dapat mengambil parameter yang memungkinkan add-on yang berbeda untuk memenangkan prosedur yang sama, zastosovuyuchi set data input yang berbeda.

Prosedur penyimpanan diperlukan untuk mendukung integritas data dan penerapan aturan bisnis. Kadang-kadang, fleksibilitas dodatkova, pecahan tersedia, karena aturan bisnis berubah, Anda dapat mengubah teks prosedur, tanpa mengubah tambahan klien.

Untuk membuat, mengubah dan memodifikasi prosedur, gunakan proposisi SQL khusus - CREATE PROCEDURE, ALTER PROCEDURE dan DROP PROCEDURE. Kami melihat mereka di divisi ofensif.

PROPOSISI BUAT PROSEDUR

Klausa CREATE PROCEDURE dipilih untuk membuat prosedur yang akan disimpan. Mungkin ada sintaks penguraian yang menyinggung:

BUAT PROC proc_name [(@parameter data_type) [= default] ] [...] SEBAGAI sql_statements

Argumen proc_name menetapkan nama prosedur, yang dapat disimpan jika bisa unik di dalam database utas. Argumen @parameter menentukan parameter prosedur. Klausa CREATE PROCEDURE dapat memiliki satu atau lebih parameter. Meskipun parameter tidak memiliki nilai untuk promosi, mungkin ada transfer oleh koresponden (atau adendum klien) di bawah jam prosedur mingguan. Di Microsoft SQL Server 7.0, jumlah parameter prosedur yang diambil tidak bertanggung jawab untuk menimpa 1024; untuk umovchannyam bau mozhut ibu znachennya NULL.

Secara signifikan, keberadaan mekanisme universal untuk mengakses data dapat memberlakukan pembatasan tambahan pada jumlah parameter prosedur yang disimpan. Misalnya, driver BDE untuk Oracle 8 dibangun untuk bekerja hanya dengan prosedur, yang jumlah parameternya tidak berubah 10.

Argumen data_type menentukan tipe data untuk parameter. Kata kunci default dapat digunakan untuk menetapkan nilai di balik promosi - bisa berupa konstanta atau NULL. Ketika nilai ditentukan untuk kunci, prosedur dapat ditinggalkan tanpa nilai untuk parameter. Demikian juga prosedur menggunakan parameter dengan kata kunci LIKE, nilai promosi dapat diganti dengan karakter grup (%, _, dan [^]).

Kata kunci OUTPUT menunjukkan parameter mana yang harus diubah.

Kata kunci AS menunjukkan bagaimana prosedur dapat divisualisasikan apakah atau tidak jumlah proposisi SQL dan proposisi pada ekstensi prosedural SQL yang khusus untuk server ini.

Prosedur, yang dibuat untuk klausa CREATE PROCEDURE tambahan, akan disimpan dari database streaming. Di Microsoft SQL Server, nama prosedur ditempatkan di tabel sistem sysobjects, dan teks keluaran ditempatkan di tabel syscomments.

Untuk mengubah apa yang telah dilakukan sebelumnya, prosedur berikut dipilih untuk memenangkan proposisi ALTER PROCEDURE, dijelaskan secara singkat di bagian berikutnya.

PROSEDUR DROP Proposisi

Tsya proposisi vikoristovuetsya untuk prosedur jarak jauh yang diambil dari basis data. Proposisi DROP PROCEDURE mengambil satu argumen, nama prosedur yang akan dilihat.

Saat menghapus prosedur yang disimpan, informasi tentangnya dihapus dari tabel sistem sysobjects dan syscomments.

Pembuatan prosedur yang dipilih yang disimpan

Di cabang yang ditugaskan ke acara, kami memberikan penghormatan kepada mereka yang akan berguna, jadi kami bisa meneruskan parameter ke presentasi untuk menggantikan nilai RegionID untuk memilih salah satu dari empat wilayah di basis data NorthWind. Mari kita lihat lagi, yang mengubah daftar wilayah menjadi wilayah:

SELECT Territories.TerritoryDescription, Region.RegionDescription FROM Territories INNER JOIN Region ON Territories.RegionID = Region.RegionID WHERE Territories.RegionID = 1

Untuk memilih wilayah lain, kita perlu mengubah pikiran dalam klausa WHERE di baris yang tersisa. Juga, karena kami telah mengubah (kami menyebutnya RegID), kami dapat memilih salah satu dari empat wilayah tanpa mengubah bagian lain dari pendaftaran.

Database NorthWind memiliki beberapa region dengan angka 1 sampai 4. Artinya RegID dapat diubah secara keseluruhan tipe. Kode prosedur yang akan diambil ditunjukkan di bawah ini:

BUAT PROSEDUR ShowRegion @RegID int AS SELECT Territories.TerritoryDescription, Region.RegionDescription FROM Territories INNER JOIN Region ON Territories.RegionID = Region.RegionID WHERE Territories.RegionID = @RegID

Kembalikan rasa hormat kepada mereka yang mungkin telah menolak seluruh teks ke SELECT yang tidak dapat diperoleh (dicetak miring) dan hanya menambahkan proposisi CREATE PROCEDURE ke nama prosedur yang baru dibuat, yang diambil (di baris pertama), parameternya dideklarasikan ( di baris lain) dan kata kunci AS, yang menunjukkan tongkol proposisi, benar-benar menang.

Hasil dari prosedur SQL Server Query Analyzer yang dibuat untuk RegID = 2 pembacaan pada gambar. 3 .

Jelas, kita dapat menyimpan prosedur yang sedang disimpan, tidak hanya untuk implementasi versi manifestasi yang diperluas, tetapi juga untuk permintaan SELECT "intelektual". Menyimpan prosedur menyediakan mekanisme yang memungkinkan Anda untuk mengotomatisasi banyak tugas rutin.

Dengan Microsoft SQL Server 7.0, kami juga dapat mengubah prosedur penyimpanan sistem untuk bekerja dengan prosedur terpenting yang disimpan:

  • sp_stored_procedures - menampilkan daftar prosedur untuk disimpan;
  • sp_helptext - menampilkan teks prosedur yang akan disimpan;
  • sp_depends - menampilkan informasi tentang kedaluwarsa prosedur penyimpanan;
  • sp_procoption - mengatur opsi untuk prosedur yang disimpan atau disetel;
  • sp_recompile - mengkompilasi ulang prosedur pada waktu minggu depan;
  • sp_rename – mengubah nama prosedur.

Prosedur sistem yang disimpan

Kita berbicara tentang Microsoft SQL Server, tetapi kita dapat menyebutkan sejumlah besar prosedur sistem, yang disimpan, diimplementasikan oleh yang baru. Nama prosedur sistem yang disimpan dimulai dari SP_ atau XP_ dan disimpan dalam database master. Lebih sering, kami telah menggambarkan perbuatan prosedur sistemik yang sering menang yang diselamatkan.

Mengungkapkan rasa hormat, bahwa pemicu tidak bersalah mengubah data coristuvachev.

Proposisi CREATE TRIGGER dapat memiliki dua tabel khusus. Misalnya, tabel yang dihapus dan disisipkan dapat memiliki struktur yang sama dengan tabel, pemicu ditetapkan padanya, dan menghapus nilai rekaman lama dan baru yang telah diubah. Misalnya, kita dapat memutar proposisi SQL berikut untuk mencari catatan jarak jauh:

PILIH * DARI dihapus

Di meja Gambar 3 menunjukkan tabel yang dihapus dan dimasukkan untuk semua kemungkinan perubahan data.

Untuk mengubah pemicu terbuka, ikuti proposisi ALTER TRIGGER. Mari kita bicara tentang sesuatu yang baru di divisi ofensif.

Untuk tongkolnya, kita perlu menambahkan dua bidang baru ke tabel, di mana jumlahnya akan dikurangi. Yaitu UpdatedBy (nama pengelola yang menghentikan record) dan UpdatedWhen (jam saat record diubah). Mari buat pemicu yang disebut KeepTrack. kode sumbu yoga:

CREATE TRIGGER KeepTrack ON Customers INSERT, UPDATE AS UPDATE Customer SET Customers.UpdatedBy = USER_NAME(), Customers.UpdatedWhen = GETDATE() DARI dimasukkan, Pelanggan MANA dimasukkan.CustomerID = Customers.CustomerID

Seperti yang Anda lihat dari teks keluaran pemicu, vin diperiksa setelah operasi kulit INSERT dan UPDATE pada tabel Pelanggan. Pemicu ini akan menyimpan nama pengelola (basis data) dari bidang Pelanggan.DiperbaruiBy, dan mengubah tanggal dan jam dari bidang Pelanggan.DiperbaruiKetika. Jumlah data dikeluarkan dari tabel waktu, diperkenalkan.

Seperti Bachimo, pemicu ini memungkinkan Anda untuk mengikuti perubahan dan memasukkan catatan baru ke dalam tabel.

Sebelum itu, bagaimana menyelesaikan sekilas tentang pemicu, kami bersalah membantu, sehingga Anda dapat mengetahui informasi tentang pemicu. Tabel sysobjects menyimpan informasi tentang pemicu dan tipe, dan tabel syscomments menyimpan teks keluarannya.

Visnovok

Di bagian ini, kita melihat beberapa jenis objek database - prosedur, deteksi, dan pemicu yang disimpan. Kami mengakui uang muka:

  • Penampilan - tse tabel virtual, suara dibuat sebagai subset kolom dalam satu nomor tabel. CREATE VIEW digunakan untuk membuat view, ALTER VIEW digunakan untuk mengubahnya, dan DROP VIEW digunakan untuk menghapusnya.
  • Prosedur yang disimpan adalah kompilasi dari satu set proposisi SQL, tabungan dalam database sebagai penamaan objek dan penggabungan sebagai fragmen kode tunggal. Untuk membuat prosedur yang disimpan, proposisi CREATE PROCEDURE diatur, untuk mengubah - ALTER PROCEDURE, dan untuk menghapus - DROP PROCEDURE.
  • Pemicu adalah jenis prosedur khusus yang disimpan, karena secara otomatis dipanggil, jika data dalam tabel tunggal ditambahkan, terlihat, atau diubah untuk proposisi SQL tambahan INSERT, DELETE, atau UPDATE. Pemicu dibuat untuk bantuan klausa CREATE TRIGGER. Untuk mengubah pemicu, proposisi ALTER TRIGGER dipilih, dan proposisi DROP TRIGGER dihapus.

KomputerTekan 12"2000

Sertakan satu baris dalam prosedur Anda - SET NOCOUNT ON:

Dengan virus DML yang ramah kulit, server SQL segera memberi tahu kita apa yang harus dilakukan tentang jumlah catatan yang direkam. Tsya nformatsija mungkin bagi kami biaya kode, tetapi setelah itu akan benar-benar sempurna. Dengan menulis SET NOCOUNT ON kita mengaktifkan fungsi ini. Untuk prosedur yang dapat menghilangkan jumlah virus atau siklus, yang dapat memberikan peningkatan produktivitas yang signifikan, jumlah lalu lintas akan berkurang secara signifikan.

Bertransaksi SQL

Cocokkan nama skema dengan nama objek:

Nah, di sini saya pikir zrazumilo. Operasi diberikan ke server untuk de shukati ob'єkti dan zamіst dari itu, untuk menggeledah kunci Anda, Anda akan tahu di mana Anda perlu minum dan apa yang harus diambil. Dengan sejumlah besar basis, tabel, dan prosedur yang disimpan, dapat menghemat waktu dan saraf kita.

Bertransaksi SQL

SELECT * FROM dbo.MyTable -- Sumbu sangat bagus -- Ganti SELECT * FROM MyTable -- Dan jadi buruk -- Prosedur EXEC memanggil dbo.MyProc -- Maaf sekali lagi -- Ganti EXEC MyProc -- Buruk!

Jangan gunakan awalan "sp_" dalam nama prosedur Anda, yang dihindari:

Faktanya, prosedur kami didasarkan pada sp_, SQL Server di tempat pertama dalam database utamanya. Di sebelah kanan, awalan yang diberikan dipilih untuk prosedur server internal khusus yang disimpan. Eksperimen yoga itu dapat menghasilkan vitrat tambahan dan menghasilkan hasil yang salah, karena prosedur dengan nama yang sama, seperti milik Anda, akan ditemukan di database yoga.

Variasikan IF EXISTS (SELECT 1) alih-alih IF EXISTS (SELECT *):

Untuk membalikkan tampilan entri di tabel berikutnya, kami memenangkan viraz IF EXISTS. Jendela Denmark ternyata benar, jadi bahkan satu nilai, tidak penting "1", semua kolom atau tabel diputar dari jendela internal. Vіdomі danі, pada prinsipnya tidak vikoristovuyutsya. Dengan cara ini, agar stisnennya lalu lintas pada jam transmisi data, lebih logis untuk mengalahkan "1", seperti gambar di bawah ini.

Menyimpan prosedur SQL - meretas modul program, yang dapat disimpan dari melihat objek yang berbeda. Dengan kata lain, objek yang memiliki instruksi SQL. Prosedur yang disimpan dapat digunakan di klien aplikasi untuk mencapai produktivitas yang baik. Selain itu, objek seperti itu sering dipanggil dari skenario lain, atau untuk menginspirasi beberapa jenis distribusi lainnya.

Masuk

Penting bagi siapa saja untuk mengetahui bahwa mereka mirip dengan prosedur lain (misalnya, MS SQL). Mungkin kau benar. Mereka mungkin memiliki parameter yang serupa, mereka dapat melihat nilai yang serupa. Di atas itu, bau busuk menempel selama satu jam. Misalnya, bau dikaitkan dengan database DDL dan DML, serta dengan fungsi inti (nama kode - UDF).

Faktanya, prosedur SQL yang ditangani mampu memberikan berbagai keuntungan, karena mereka melihat bagian tengah dari proses tersebut. Bezpeka, variabilitas pemrograman, produktivitas - semuanya menambah inti, yang bekerja dari basis data, lebih banyak data. Puncak popularitas prosedur jatuh pada 2005-2010, jika program tersebut dirilis dengan nama "Microsoft" dengan nama SQL Server Management Studio. Dengan bantuan basis data, ini menjadi lebih sederhana, lebih praktis, dan lebih nyaman. Dari rock di dunia seperti mendapatkan popularitas di kalangan programmer. Hari ini, ini adalah program yang benar-benar sehat, seperti untuk koristuvachivs, seperti "menghubungkan" dengan basis data, itu telah menjadi seperti "Exel".

Ketika Anda mengklik prosedur, itu langsung diproses oleh server itu sendiri tanpa zayvih protsessіv yang vtruchannya coristuvacha. Jika demikian, Anda dapat zdiyasnyuvati menjadi seperti jauh, vikonannya, perubahan. Untuk semua itu, Anda memerlukan operator DDL, yang otodidak untuk merampok bagian pemrosesan objek yang paling rumit. Selain itu, tampaknya sangat cepat, dan server sebenarnya bukan navantazhuetsya. Kecepatan dan produktivitas semacam ini memungkinkan Anda untuk dengan mudah mentransfer sejumlah besar informasi dari server ke server.

Untuk implementasi teknologi ini, robot dengan informasi didasarkan pada pemrograman bergerak. Sebelum mereka, Anda dapat melihat, misalnya, PL / SQL seperti Oracle, PSQL dalam sistem InterBase dan Firebird, serta Transact-SQL "Microsoft" klasik. Semua bau dikenali untuk pembuatan dan pengetikan prosedur yang disimpan, yang memungkinkan penguasaan algoritme dalam basis data yang hebat. Penting bagi mereka yang mengelola informasi tersebut untuk dapat melindungi semua objek dari akses tidak sah ke sistem pihak ketiga dan, tentu saja, membuat, mengubah, atau melihat data lain.

Produktifitas

Objek database Qi dapat diprogram dengan jalur yang berbeda. Tse memungkinkan coristuvachas untuk memilih jenis metode vicorous, yang akan menjadi yang paling cocok, yang akan menghemat kekuatan saat itu. Selain itu, prosedur itu sendiri sedang diproses, yang memungkinkan Anda menyembunyikan nilai tukar per jam yang luar biasa antara server dan server. Selain itu, modul dapat diprogram ulang dan diubah kapan saja. Terutama varto singkatan dari kecepatan, yang diperlukan untuk meluncurkan prosedur SQL yang disimpan: proses ini lebih penting untuk orang lain yang serupa dengannya, sehingga dapat dilakukan dengan mudah dan universal.

Bezpeka

Jenis pemrosesan informasi ini digunakan dalam proses serupa, yang menjamin peningkatan keamanan. Tse bezpechuetsya karena fakta bahwa akses orang lain ke prosedur dapat dimatikan lagi. Tse untuk memungkinkan administrator untuk melakukan operasi dengan mereka secara mandiri, tidak takut akan luapan informasi atau akses tidak sah ke basis data.

transfer data

Sambungan antara prosedur SQL, yang diambil, dan adendum klien didasarkan pada parameter dan nilai yang berbeda, yang diputar. Jangan obov'yazkovo mentransfer data ke prosedur, yang disimpan, informasi diproses (terutama sesuai permintaan) dan diproses untuk SQL. Karena prosedur, yang disimpan, telah menyelesaikan pekerjaannya, ada paket data kembali (ale, saya tahu, untuk bug) ke tambahan, sehingga Anda dapat menggunakan yoga, metode kemenangan, untuk bantuan yang Anda dapat cari tahu cara menyimpan prosedur SQL, jadi dan putar, misalnya:

Melewati data untuk parameter tambahan ke tipe Output;

Transfer data untuk bantuan operator;

Kekuatan penghargaan atas bantuan operator untuk pilihan.

Dan sekarang mari kita lihat, seolah-olah melihat seluruh proses di tengah.

1. Membuat Prosedur Tersimpan EXEC di SQL

Anda dapat membuat prosedur di MS SQL (Managment Studio). Setelah prosedur dibuat, itu akan ditebus dari pemrograman data dasar, di mana prosedur akan dibuat oleh operator. Untuk prosedur SQL vykonannya, scho zberіgayutsya, vykoristovuyut EXEC-process, kaki m_sti m'ya dari objek itu sendiri.

Saat prosedur digabungkan, nama dideklarasikan terlebih dahulu, setelah itu satu atau lebih parameter yang ditetapkan untuk Anda dipilih. Parameter bisa tidak mengikat. Karena parameter untuk tubuh prosedur akan ditulis, maka perlu untuk melakukan operasi yang diperlukan.

Di sebelah kanan, di mana tubuh dapat diubah secara lokal, roztashovani di nіy, dan ts berubah secara lokal juga sesuai dengan tanggal sebelum prosedur. Dengan kata lain, mereka hanya dapat dilihat di tengah-tengah tubuh prosedur Microsoft SQL Server. Menyimpan prosedur kadang-kadang vvazhayutsya lokal.

Jadi, untuk membuat prosedur, kita memerlukan nama prosedur dan setidaknya satu parameter di badan prosedur. Perhatikan bahwa opsi paling penting untuk waktu seperti itu adalah pembuatan prosedur untuk nama skema di pengklasifikasi.

Tubuh prosedur dapat berupa beberapa jenis contoh, seperti pembuatan tabel, penyisipan satu atau lebih baris baris dalam tabel, jenis dan sifat basis data, dan sebagainya. Badan proteo prosedur berada di antara kemenangan operasi saat ini di operasi baru. Tindakan delimitasi penting telah dibangun di bawah ini:

Tubuh tidak bersalah melakukan prosedur lain yang sedang diselamatkan;

Tubuh dapat membuat pengampunan tentang objek;

Tubuh tidak bersalah menciptakan pemicu sehari-hari.

2. Memasang perubahan di badan prosedur

Anda dapat mengubahnya secara lokal ke tubuh prosedur, dan bau hanya akan berubah di tengah-tengah tubuh prosedur. Praktek yang baik adalah penciptaan prosedur yang diubah pada tongkol tubuh, yang disimpan. Tetapi juga dimungkinkan untuk menginstal perubahan di tempat mana pun di badan objek tertentu.

Dalam beberapa kasus, Anda dapat mengetahui bahwa beberapa perubahan dipasang dalam satu baris, dan kulit parameter perubahan diperkuat air. Juga, harap hormati bahwa Anda dapat mengubah awalan @. Anda dapat menyisipkan perubahan untuk jenis prosedur, di mana pun Anda inginkan. Misalnya, mengubah @NAME1 dapat disuarakan lebih dekat ke akhir prosedur. Untuk memberikan arti dari perubahan tanpa suara, satu set data khusus dikumpulkan. Di hadapan situasi, jika lebih dari satu perubahan disuarakan dalam satu baris, dalam situasi seperti itu ada kurang dari satu set data khusus.

Cukup sering, kuis bertanya: "Bagaimana Anda mengenali nilai kecil dalam satu pernyataan dalam judul prosedur?" Sehat. Memberi makan jangkrik, tetapi lebih mudah membuatnya lebih kaya, Anda tidak berpikir begitu. Petunjuk: untuk bantuan pasangan seperti itu, seperti "Pilih Var = nilai". Anda bisa mengalahkan peluang, menyebarkannya dengan koma.

Di pantat paling manipulatif, orang menunjukkan penciptaan prosedur sederhana, apa yang diurus, dan vikonannya . Untuk prosedur ini, Anda dapat mengambil parameter seperti proses, apa yang dipanggil, dan nilainya mendekati yang baru (tetapi jangan mengubahnya). Saat bau busuk keluar, maka di tengah tubuh, proses dimulai. Misalnya, untuk membuat prosedur, bagaimana menerima lokasi wilayah dari pelanggan, apa yang harus dipanggil, dan mengubah data tentang itu, berapa banyak penulis yang dikirim ke lokasi wilayah. Prosedur akan memperhitungkan tabel penulis dari basis data, misalnya, Pub, hingga akhir daftar penulis. Untuk melihat basis data, misalnya, Google menangkap skrip SQL dari sisi SQL2005.

Dalam kasus depan, prosedur mengambil dua parameter, yang akan disebut @State dan @City dalam bahasa Inggris. Jenis data konsisten dengan jenis yang ditetapkan untuk suplemen. Judul prosedur dapat diubah secara internal oleh @TotalAuthors (dari semua penulis), dan akan diubah untuk tujuan menampilkan kuantitasnya. Dalі z'yavlyaєtsya razdіl vyboru zaputu, yakii semua pіdrakhovuє. Nareshti, podrahovane znachennya vіdobrazhaєєtsya vіknі vyvodu atas bantuan operator kepada seorang teman.

Bagaimana cara menyimpan prosedur dengan SQL Viconati

Ada dua cara untuk mengikuti prosedur. Jalur pertama ditampilkan, melewati parameter, karena daftar divisi ditampilkan setelah nama prosedur. Boleh, kita mungkin memiliki dua arti (seperti di pantat depan). Nilai diambil untuk parameter perubahan tambahan dari prosedur @State dan @City. Yang seluruh cara mentransfer parameter dalam urutan penting. Metode ini disebut passing argumen ordinal. Dengan cara lain, parameter dikenali secara tegas, dan dengan cara ini urutannya tidak penting. Cara lain untuk melakukan ini adalah dengan memberikan argumen bernama.

Prosedur dapat diubah sebagai standar. Jadi begitulah, seperti di pantat depan, tetapi hanya di sini parameternya ditampilkan. Jadi parameter @City diambil terlebih dahulu, dan @State diambil dari nilai kunci. Parameter di belakang kunci akan terdengar seperti tidak apa-apa. Prosedur SQL yang disimpan dilewatkan sebagai parameter sederhana. Dalam hal ini, ingatlah, parameter UT mengesampingkan nilai untuk kunci SA. Vicoon lainnya memiliki lebih dari satu nilai argumen untuk parameter @ City, dan parameter @ State mengambil nilai kunci CA. Pembaruan pada program akan senang, sehingga perubahan untuk singkatan akan diperbarui lebih dekat ke akhir daftar parameter. Dengan cara yang berbeda, kita tidak bisa vykonannya, dan bahkan Anda bersalah berlatih dengan transfer argumen penamaan, yang lebih baik dan lebih foldable.

4. Simpan Prosedur SQL Server: Cara Memutar

Ada tiga cara penting untuk mengelola data pada prosedur penyitaan yang disimpan. Bau busuk direhabilitasi di bawah ini:

Memutar nilai prosedur yang diambil;

Kecualikan parameter prosedur yang sedang disimpan;

Pilih salah satu prosedur yang disimpan.

4.1 Mengubah nilai menyimpan prosedur SQL

Dalam metode ini, prosedur memberikan nilai perubahan lokal dan memutarnya. Prosedur dapat dibalik tanpa penundaan. Di pantat penyerang, mereka menciptakan prosedur, seolah-olah membalikkan banyak penulis. Jika Anda membandingkan prosedur ini dengan yang sebelumnya, Anda dapat berpikir bahwa arti untuk yang lain diganti dengan yang kembali.

Sekarang mari kita bertanya-tanya bagaimana mengikuti prosedur dan memasukkan artinya, bagaimana cara berbalik. Prosedur vikonannya vmagaє vstanovlennya zminnoї teman itu, yak dilakukan setelah proses. Perhatikan bahwa Anda dapat mengganti operator Select, misalnya, Select @RetValue, serta OutputValue.

4.2 Hapus parameter prosedur SQL yang disimpan

Arti dari vіdpovіd dapat menjadi vikoristane untuk memutar satu zminnoy, yang kami dan bachiled di pantat depan. Varian dari parameter Output memungkinkan prosedur untuk mengoreksi satu atau yang lain nilai perubahan untuk sisi lain. Parameter output ditunjuk oleh kata kunci yang sama "Output" ketika prosedur dibuat. Jika parameter pekerjaan adalah parameter keluaran, maka objek prosedur bertanggung jawab untuk mengatur nilainya. Menyimpan prosedur SQL, yang dapat digunakan lebih rendah, digunakan dalam kasus yang berbeda dengan informasi sub-bag.

Aplikasi kami akan memiliki dua nama resmi: @TotalAuthors dan @TotalNoContract. Bau busuk ditunjukkan oleh daftar parameter. Jumlah perubahan diberikan di tengah tubuh prosedur. Jika kita memenangkan parameter, pelanggan dapat memilih nilai yang disisipkan di tengah isi prosedur.

Selain itu, dalam skenario sebelumnya, dua perubahan dibuat untuk meningkatkan nilai, seolah-olah menyimpan prosedur MS SQL Server di parameter keluaran. Kemudian prosedur dipukuli oleh jalur pengaturan nilai normal parameter CA. Parameter berikutnya sama, dan, kemudian, perubahan tanpa suara ditransmisikan secara berurutan. Menangkap rasa hormat bahwa jam berlalunya hari-hari yang berubah adalah kata kunci juga diberikan di sini. Setelah prosedur berhasil, signifikansi, saat mereka meminta bantuan parameter terakhir, ditampilkan untuk rekonsiliasi lebih lanjut.

4.3 Pilih salah satu prosedur SQL untuk disimpan

Teknik ini digunakan untuk memutar himpunan nilai dalam tabel data (RecordSet) ke prosedur lengkap yang diambil. Dalam aplikasi ini, prosedur SQL yang disimpan, dengan parameter @AuthID, memberi makan tabel "Penulis" dengan jalur filter, rekaman diputar setelah parameter @AuthId tambahan. Pernyataan Select mengesampingkan apa yang dapat diputar dan memanggil prosedur untuk dipilih. Ketika prosedur gagal, AuthId dilewatkan kembali. Prosedur seperti itu di sini selalu hanya memutar satu catatan, atau jika tidak, itu perlu. Ale, prosedur yang dilakukan tidak diperbolehkan membalik lebih dari satu catatan setiap hari. Seringkali dimungkinkan untuk menggunakan contoh, untuk beberapa rotasi data dengan parameter yang berbeda, dengan partisipasi perhitungan perubahan, ada cara untuk memberikan sejumlah nilai tas.

Pada akhirnya

Prosedur yang sedang disimpan adalah untuk menyelesaikan dengan modul perangkat lunak yang serius, yang ternyata atau mentransmisikan, dan juga menginstal perubahan yang diperlukan untuk adendum klien. Prosedur Oskіlki, yang disimpan, vikonuєtsya di server itu sendiri, pertukaran data dengan kewajiban besar antara server dan adendum klien (untuk yang dapat dikurangkan) dapat dihapus. Ini memungkinkan Anda untuk menurunkan versi ke server SQL, yang, jelas, jatuh ke tangan penguasa mereka. Salah satu yang dapat diperkirakan adalah prosedur T SQL yang ditangani oleh mereka yang terlibat dalam pembuatan database yang signifikan. Juga, ada sejumlah besar nuansa megah, yang dapat berbeda ketika melakukan prosedur yang disimpan, lebih diperlukan bagi mereka yang berencana untuk terlibat dalam pemrograman, termasuk profesional.

Jika ada prosedur berikut untuk disimpan, dan apakah saya bersalah karena memenangkan pernyataan di SQL Server?

Biarkan saya mengizinkan Anda membuat minuman dinamis, bagaimana kami dapat meningkatkan parameternya?

Manakah di antara mereka yang paling terlihat, dan mana yang terbaik, dan mana yang paling sedikit?

Lihat atau prosedur yang sedang disimpan, apakah mereka terus-menerus menghemat memori?

Apa artinya, katakanlah, bahwa pernyataan membuat tabel virtual dan prosedur membuat tabel bahan?

Bersikap baiklah, beri tahu saya tentang lebih banyak poin, seperti bau busuk.

Solusi Mengumpulkan Dari Web "Mengapa ada perbedaan antara prosedur, tabungan, dan pajak?"

Lihat Maya meja. Anda dapat mencapai jumlah tabel dalam pengajuan dan memenangkan aplikasi untuk pengiriman data, sehingga data ditemukan dalam satu tabel.

Prosedur untuk memilih parameter untuk fungsi yang dipilih telah disimpan ... sehingga penyisipan data atau rotasi nilai lain atau kumpulan data diperbarui.

Membuat pemberitahuan dan prosedur yang disimpan - untuk membalas informasi dari Microsoft tentang hal itu, jika dan mengapa memenangkannya.

Katakanlah saya punya dua tabel:

tbl_user Stovptsi: .user_id, .user_name, .user_pw

tbl_profile Stowpci: .profile_id, .user_id .profile_description

Jadi, ketika saya mencoba mengambil tabel ini BANYAK ... alih-alih itu, untuk bekerja di sql bagian CLEAR, saya akan menggunakan tampilan, misalnya:

BUAT Lihat vw_user_profile AS Pilih A.user_id, B.profile_description FROM tbl_user A kiri gabung tbl_profile B di A.user_id = b.user_id GO

Oleh karena itu, di masa depan, saya ingin meminta profile_description untuk id koristuvach ... semua yang saya butuhkan untuk merampok,

PILIH profile_description FROM vw_user_profile WHERE user_id = @ID

Kode ini dapat diubah dalam prosedur yang disimpan, misalnya:

Buat prosedur dbo.getDesc @ID int AS start SELECT profile_description FROM vw_user_profile WHERE user_id = @ID END GO

Untuk itu saya bisa telepon

Dbo.getDesc 25

dan saya menghapus deskripsi untuk ID koristuvach 25 de 25 - parameter Anda.

Jelas bahwa BAGATO lebih banyak, tetapi ide utamanya lebih sedikit.

Di belakang, Anda perlu memahami bahwa penghinaan adalah pidato yang berbeda. Penghematan prosedur lebih unggul untuk pernyataan INSERT-UPDATE-DELETE. Kiriman tersebut dibenarkan untuk pernyataan SELECT. dan Anda bersalah atas kebencian yang menang.

Anda tidak dapat mengubah data pada pemandangan.

Lihatlah: Ini adalah tabel virtual yang terdiri dari satu atau lebih baris dan kolom dari tabel basis data nyata yang berbeda. Tse template rowk_v dan stovpts_v k_lkoh tabel. Anda tidak dapat melewatkan parameter apa pun di sini.

Simpan prosedur: gunakan satu set pernyataan SQL sebelumnya, di mana Anda dapat mengedit parameter seperti data input dan menghapus data output.

Penampilan dapat ditampilkan dalam prosedur yang disimpan, tetapi prosedur yang disimpan tidak dapat ditampilkan dalam Tampilan…!

Prosedur shovischa menang jika SQL biasa saja tidak cukup. Prosedur untuk menyimpan harus diubah, siklus dan siklus prosedur lain yang disimpan. Pemrograman tse mova, bukan mova zapitіv.

    Penampilannya statis. Pikirkan mereka seolah-olah itu adalah tabel baru dengan tata letak yang sederhana, dan data di dalamnya dibuat secara spontan, dengan catatan kemenangan, yang dengannya Anda telah membuat segalanya. Seperti pada tabel SQL mana pun, Anda dapat mengurutkan dan memfilter menurut WHERE , GROUP BY dan ORDER BY .

    Tse untuk mengesampingkan fakta bahwa Anda bekerja.

    Tse untuk meletakkan di dasar data. Maaf, jalankan saja kueri dan filter hasilnya. Namun, basis data, seperti Oracle, memungkinkan Anda membuat pernyataan "materialisasi", seperti di tabel utama, karena diperbarui secara otomatis saat Anda mengubah tipe data dasar.

    Perwujudan pernyataan memungkinkan Anda untuk membuat indeks di kolom pernyataan (terutama pada kolom terhitung, yang tidak ditemukan di mana pun di basis data).

    Saya tidak mengerti apa yang Anda katakan.

Perbedaan utama terletak pada kenyataan bahwa jika Anda meminta pernyataan, penunjukan dimasukkan ke dalam permintaan Anda. Prosedurnya dapat memberikan hasil, tetapi dikompilasi dan sangat cepat. Opsi kedua adalah mengindeks pemberitahuan.

SQL View adalah tabel virtual berdasarkan kueri SQL SELECT. Pengajuan diajukan untuk satu atau lebih tabel basis data yang relevan atau pernyataan lain. Ini mittєviy znіmok dannykh, prosedur todi yak, scho zberіgaєtsya, adalah sekelompok pernyataan Transact-SQL, dilipat menjadi satu rencana vikonannya.

Pereglyad adalah demonstrasi sederhana dari data yang disimpan dalam tabel basis data, seperti prosedur yang disimpan oleh sekelompok operator, yang dapat di-vicon.

Diarsipkan lebih lanjut, oscillki vono mencerminkan data dari tabel, tentang cara penggunaannya, seperti prosedur pengumpulan instruksi sql.

Balikkan artikel ini: Meninjau prosedur yang sedang disimpan. Orang-orang yang kamu bisikkan

@Patrick benar ketika Anda berkata, yah, mari kita lihat makanan Anda yang lain, buat Tampilan untuk diri Anda sendiri di memori, dan di tipe bera Bergabung, Data dan bahkan jika itu akan dipecah, baik itu agregasi, Anda mungkin juga berakhir lapar mencari.

Simpan prosedur untuk menyimpan semua pekerjaan Anda baik dengan substitusi Tabel Hash Temp, misalnya #tmpTable1, atau dalam memori @tmpTable1 untuk bantuan. Zalezhno v_d dari apa yang ingin Anda katakan.

Prosedur yang diambil mirip dengan fungsi, tetapi disebut dengan nama langsung. zamіst funktsіy, yakі sebenarnya vikoristovuyutsya di tengah permintaan.

Jelas, sebagian besar waktu tabel ada di memori, karena Anda tidak mengambil banyak uang.

Mahesh tidak benar, jika dia mengizinkan anggur, Anda tidak dapat mengubah upeti dari upeti. Ayah, lihat Patrick

BUAT Lihat vw_user_profile AS Pilih A.user_id, B.profile_description FROM tbl_user A kiri gabung tbl_profile B di A.user_id = b.user_id

Saya dapat memperbarui data ... seperti pantat, saya dapat mengetahui apakah itu cich ...

Perbarui vw_user_profile Setel profile_description="Manager" di mana user_id=4

Perbarui tbl_profile Setel profile_description="Manager" di mana user_id=4

Anda tidak dapat memasukkannya ke dalam deklarasi, karena tidak semua bidang di seluruh tabel ada, dan saya berasumsi bahwa PROFILE_ID adalah kunci utama dan tidak boleh NULL. Namun, Anda juga dapat menyisipkan INSERT di vistavu...

Saya membuat aplikasi untuk meja utama, vicorist ...

Buat View Junk seperti SELECT * view

Masukkan nilai sampah (Kode,nama) ("glyn", "Glyn Roberts"), ("Mary", "Maryann Roberts"), ("Mary", "Maryann Roberts")

HAPUS dari Junk Where ID>4

INSERT, DELETE bekerja pada titik yang sama

Jelas, Anda tidak dapat memutakhirkan apakah bidang, apakah agregasi atau roaming, tetapi apakah pernyataan, seperti hanya pernyataan langsung, dapat ditingkatkan atau tidak.

Jika Anda telah melihat lebih dari satu tabel, Anda tidak dapat menyisipkan atau melihat, tetapi jika Anda telah melihat lebih dari satu tabel, Anda dapat bersuara.

Selain menunjukkan lebih banyak komentar, saya ingin menambahkan sedikit rasa hormat tentang Views.

  1. Hadiah bisa menang untuk lipat prikhovuvannya. Tunjukkan skenario Anda sendiri, di mana 5 orang mengerjakan proyek, dan hanya satu dari mereka yang sudah menjadi tim dengan basis data, misalnya, asosiasi yang dapat dilipat. Dalam skenario seperti itu, anggur dapat dibuat, yang dapat dengan mudah diminta oleh anggota tim lain, dan stink shard meminta satu tabel.
  2. Keamanan Tampilan dapat dengan mudah diimplementasikan. Katakanlah kita spіvrobіtnik meja Gaji , nomor SSN. Warga tidak bersalah mencari coristuvachs, yang tidak diizinkan untuk melihat mereka. Dengan cara ini, kita dapat membuat notifikasi, seperti memilih kolom dalam tabel, sebagai tidak mengotorisasi, seperti im'ya , vіk ta dll, tanpa memberikan komentar yang bertentangan (misalnya, tentang gaji, dll, tentang yaki mi yang ditebak sebelumnya). Sekarang kita dapat melihat diperbolehkan untuk permintaan langsung ke tabel karyawan dan simpan saja untuk dibaca dari subjek. Dengan cara ini, kita dapat mewujudkan keamanan untuk membantu Tampilan.