Argumen pertama untuk prosedur yang disimpan sistem sp_helptext
adalah:
[
@objname
= ] 'name'
Apakah nama yang memenuhi syarat atau tidak memenuhi syarat dari objek yang ditentukan pengguna, skema-lingkup. Tanda kutip diperlukan hanya jika objek yang memenuhi syarat ditentukan. Jika nama yang sepenuhnya memenuhi syarat, termasuk nama basis data, disediakan, nama basis data haruslah nama dari basis data saat ini. Objek harus dalam database saat ini. namanya nvarchar(776)
, tanpa standar.
Selain itu, dokumentasi untuk Pengidentifikasi Terbatas (Database Engine) menyatakan:
Menggunakan Pengidentifikasi Sebagai Parameter dalam SQL Server
Banyak prosedur, fungsi, dan pernyataan DBCC yang disimpan sistem menggunakan nama objek sebagai parameter. Beberapa parameter ini menerima nama objek multi bagian, sementara yang lain hanya menerima nama bagian tunggal. Apakah satu bagian atau nama multi bagian diharapkan menentukan bagaimana suatu parameter diuraikan dan digunakan secara internal oleh SQL Server.
Nama Parameter bagian tunggal
Jika parameternya adalah pengenal satu bagian, nama dapat ditentukan dengan cara berikut:
- Tanpa tanda kutip atau pembatas
- Terlampir dalam tanda kutip tunggal
- Terlampir dalam tanda kutip ganda
- Terlampir dalam kurung
Nama Parameter Multipart Nama
multipart adalah nama yang memenuhi syarat yang mencakup database atau nama skema dan juga nama objek. Ketika nama multi bagian digunakan sebagai parameter, SQL Server mensyaratkan bahwa string lengkap yang membentuk nama multi bagian dilampirkan dalam satu set tanda kutip tunggal.
Argumen pertama yang sp_helptext
menerima nama objek bagian tunggal (tidak memenuhi syarat) dan multipart (berkualifikasi).
Jika parser T-SQL mengartikan item setelah sp_helptext
sebagai nama bagian tunggal (sesuai dengan empat poin poin di atas), nama yang dihasilkan dilewatkan sebagai nilai argumen (tipe string) yang diharapkan oleh prosedur.
Ketika parser melihatnya sebagai nama multi -bagian, teks harus dikelilingi dengan tanda kutip tunggal seperti yang dinyatakan.
Fitur kunci dari nama multi-bagian adalah .
pemisah (di luar pembatas apa pun).
Contoh-contoh dari pertanyaan ini berhasil ditafsirkan sebagai nama bagian tunggal:
myproc - satu bagian (tanpa tanda kutip atau pembatas - bullet # 1)
[myproc] - satu bagian (dalam kurung - peluru # 4)
'myproc' - satu bagian (dalam tanda kutip tunggal - bullet # 2)
'dbo.myproc' - multi dengan tanda kutip tunggal yang diperlukan
[dbo.myproc] - satu bagian (dalam kurung - peluru # 4)
Dua contoh terakhir dari pertanyaan keduanya diuraikan sebagai nama parameter multi bagian (karena .
pemisah yang terbuka ). Mereka menghasilkan kesalahan karena tidak memiliki tanda kutip tunggal yang diperlukan:
dbo.myproc - multi bagian tanpa tanda kutip tunggal yang diperlukan
[dbo]. [myproc] - mulailah tanpa tanda kutip tunggal yang diperlukan
Contoh tambahan ini menggunakan tanda kutip ganda berhasil:
"dbo.myproc" - satu bagian (dalam tanda kutip ganda - titik peluru # 3)
Perhatikan bahwa itu berhasil ditafsirkan (untuk nilai parameter prosedur) sebagai nama bagian tunggal yang valid , tetapi kode prosedur dapat menafsirkan string (multi-bagian) yang diterimanya secara fleksibel (menggunakan PARSENAME
dan OBJECTID
).
Sebagai poin akhir yang menarik, perhatikan bahwa menggunakan tanda kutip ganda di sini tidak tergantung pada pengaturan QUOTED_IDENTIFIER
.