Terkadang saya menyimpan nama objek (pengidentifikasi) di beberapa database kami, misalnya dalam beberapa tabel parameter. Karena saya memilih catatan dari tabel ini menggunakan operator perbandingan '=' atau 'LIKE', saya harus berhati-hati untuk menyimpan nama-nama ini selalu dengan atau tanpa tanda kurung .
IF EXISTS (SELECT 1 FROM MYTABLE WHERE OBJ_NAME = '[TABLE_NAME]';
atau
IF EXISTS (SELECT 1 FROM MYTABLE WHERE OBJ_NAME = 'TABLE_NAME';
Namun MS-SQL memiliki beberapa fungsi di mana Anda dapat menggunakan nama objek dengan atau tanpa tanda kurung, misalnya fungsi OBJECT_ID (). Saya telah membuat contoh minimal di dbfiddle.uk .
CREATE TABLE TEST
(
ID INT IDENTITY(1,1) PRIMARY KEY,
OBJECT sysname NOT NULL
);
GO
INSERT INTO TEST VALUES ('[obj1]'),('obj2'),('obj3'),('[obj4]');
GO
Sekarang saya dapat menggunakan OBJECT_ID () untuk memeriksa apakah tabel TEST ada dengan cara ini:
IF OBJECT_ID('TEST') IS NOT NULL
BEGIN
SELECT 'TEST EXISTS.' OBJECT_ID;
END
GO
| OBJECT_ID |
| :----------- |
| TEST EXISTS. |
IF OBJECT_ID('[TEST]') IS NOT NULL
BEGIN
SELECT '[TEST] EXISTS.' OBJECT_ID;
END
GO
| OBJECT_ID |
| :------------- |
| [TEST] EXISTS. |
Tidak masalah jika saya lulus TEST pengidentifikasi dengan atau tanpa tanda kurung, parser cukup pintar untuk menghapus tanda kurung.
Yah, saya bisa mensimulasikan ini dengan menambahkan fungsi skalar yang menghapus tanda kurung dari satu string:
CREATE FUNCTION UNQUOTENAME(@TXT NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
RETURN IIF(LEFT(@TXT, 1) = N'[' AND RIGHT(@TXT, 1) = N']',
SUBSTRING(@TXT, 2, LEN(@TXT) - 2),
@TXT);
END;
GO
Dan kemudian gunakan dengan cara ini:
SELECT dbo.UNQUOTENAME (N'[FIELD]') NAME1, N'FIELD' NAME2;
GO
NAME1 | NAME2
:---- | :----
FIELD | FIELD
SELECT ID, OBJECT
FROM TEST
WHERE OBJECT LIKE 'obj%';
GO
ID | OBJECT
-: | :-----
2 | obj2
3 | obj3
SELECT ID, dbo.UNQUOTENAME(OBJECT)
FROM TEST
WHERE dbo.UNQUOTENAME(OBJECT) LIKE 'obj%';
GO
ID | (No column name)
-: | :---------------
1 | obj1
2 | obj2
3 | obj3
4 | obj4
Tapi pertanyaan saya adalah:
- Apakah ada fungsi bawaan tersembunyi yang menghilangkan tanda kurung menggunakan T-SQL?
Aku di sini
sumber
[
dan akhir]
serta menggantikannya]]
dengan]
Ketika tanda kurung diperlukan - itu karena pengidentifikasi Anda sudah merupakan kata kunci yang dipesan. Menggunakannya secara sewenang-wenang tidak hanya tidak perlu, itu menyebabkan banyak kebingungan seperti yang Anda lihat.
Menurut pendapat saya, cara terbaik adalah menghindari menggunakan pengidentifikasi yang dipesan di tempat pertama.
sumber