Bagikan melalui


Masalah penamaan T-SQL

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceDatabase SQL di Microsoft Fabric

Saat Anda menganalisis kode T-SQL dalam proyek database Anda, satu atau beberapa peringatan mungkin dikategorikan sebagai masalah penamaan. Anda harus mengatasi masalah penamaan untuk menghindari situasi berikut:

  • Nama yang Anda tentukan untuk objek mungkin bertentangan dengan nama objek sistem.
  • Nama yang Anda tentukan selalu perlu diapit dalam karakter escape (di SQL Server, '[' dan ']').
  • Nama yang Anda tentukan mungkin membingungkan orang lain yang mencoba membaca dan memahami kode Anda.
  • Kode mungkin rusak jika Anda menjalankannya dengan rilis SQL Server di masa mendatang.

Secara umum, Anda mungkin mengabaikan masalah penamaan jika aplikasi lain yang tidak bisa Anda ubah bergantung pada nama saat ini.

Aturan yang disediakan mengidentifikasi masalah penamaan berikut:

SR0011: Hindari menggunakan karakter khusus dalam nama objek

Jika Anda memberi nama objek database dengan menggunakan karakter apa pun dalam tabel berikut, Anda membuatnya lebih sulit tidak hanya untuk mereferensikan objek tersebut tetapi juga untuk membaca kode yang berisi nama objek tersebut:

Character Description
Karakter spasi kosong
[ Kurung siku kiri
] Kurung siku kanan
' Tanda kutip tunggal
" Tanda kutip ganda

Cara memperbaiki pelanggaran

Untuk mengatasi masalah ini, Anda harus menghapus semua karakter khusus dari nama objek. Jika objek direferensikan di lokasi lain dalam proyek database Anda (seperti dalam pengujian unit database), Anda harus menggunakan pemfaktoran ulang database untuk memperbarui referensi. Untuk informasi selengkapnya, lihat Mengganti Nama Semua Referensi ke Objek Database.

Example

Dalam contoh pertama, tabel berisi kolom yang memiliki karakter khusus dalam namanya. Dalam contoh kedua, nama tidak berisi karakter khusus.

CREATE TABLE [dbo].[TableWithProblemColumn]
(
[ID] INT NOT NULL IDENTITY(0, 1),
[Small'String] VARCHAR(10)
)
ON [PRIMARY]

CREATE TABLE [dbo].[FixedTable]
(
[ID] INT NOT NULL IDENTITY(0, 1),
[SmallString] VARCHAR(10)
)
ON [PRIMARY]

SR0012: Hindari menggunakan kata yang dipesan untuk nama jenis

Anda harus menghindari penggunaan kata yang dipesan sebagai nama jenis yang ditentukan pengguna karena pembaca memiliki waktu yang lebih sulit untuk memahami kode database Anda. Anda dapat menggunakan kata cadangan di SQL Server sebagai pengidentifikasi dan nama objek hanya jika Anda menggunakan pengidentifikasi dengan pembatas. Untuk informasi selengkapnya, lihat daftar lengkap kata kunci yang dipesan.

Cara memperbaiki pelanggaran

Anda harus mengganti nama tipe atau nama objek yang ditentukan pengguna.

Example

Contoh pertama menunjukkan definisi untuk jenis yang ditentukan pengguna yang memicu peringatan ini. Contoh kedua menunjukkan salah satu cara untuk memperbaiki jenis yang ditentukan pengguna dan mengatasi masalah.

-- Potential misuse of a keyword as a type name
CREATE TYPE Alter
FROM nvarchar(11) NOT NULL;

-- Corrected type name
CREATE TYPE AlterType
FROM nvarchar(11) NOT NULL;

SR0016: Hindari menggunakan sp_ sebagai awalan untuk prosedur tersimpan

Di SQL Server, awalan sp_ menunjuk prosedur tersimpan sistem. Jika Anda menggunakan awalan tersebut untuk prosedur tersimpan, nama prosedur Anda mungkin bertentangan dengan nama prosedur tersimpan sistem yang akan dibuat di masa mendatang. Jika konflik seperti itu terjadi, aplikasi Anda mungkin rusak jika aplikasi Anda mengacu pada prosedur tanpa memenuhi syarat referensi berdasarkan skema. Dalam situasi ini, nama terhubung dengan prosedur sistem alih-alih prosedur Anda.

Cara memperbaiki pelanggaran

Untuk mengatasi masalah ini, Anda harus mengganti sp_ dengan awalan yang berbeda untuk menunjuk prosedur tersimpan pengguna, atau Anda tidak boleh menggunakan awalan sama sekali.

Example

Dalam contoh pertama, nama prosedur menyebabkan peringatan ini dikeluarkan. Dalam contoh kedua, prosedur menggunakan usp_ awalan alih-alih sp_ dan menghindari peringatan.

CREATE PROCEDURE [dbo].[sp_procWithWarning]
(
@Value1 INT,
)
AS
BEGIN
-- Additional statements here
RETURN 0;
END

CREATE PROCEDURE [dbo].[usp_procFixed]
(
@Value1 INT,
)
AS
BEGIN
-- Additional statements here
RETURN 0;
END