कभी-कभी हम अपने कुछ डेटाबेस में ऑब्जेक्ट नाम (पहचानकर्ता) स्टोर करते हैं, उदाहरण के लिए कुछ पैरामीटर टेबल में। क्योंकि मैं '=' या 'LIKE' तुलना संचालकों का उपयोग करके इन तालिकाओं से रिकॉर्ड का चयन करता हूं, मुझे इन नामों को हमेशा ब्रैकेट के साथ या उसके बिना संग्रहीत करने का ध्यान रखना चाहिए ।
IF EXISTS (SELECT 1 FROM MYTABLE WHERE OBJ_NAME = '[TABLE_NAME]';
या
IF EXISTS (SELECT 1 FROM MYTABLE WHERE OBJ_NAME = 'TABLE_NAME';
हालाँकि MS-SQL के कुछ कार्य हैं जहाँ आप OBJECT_ID () फ़ंक्शन के उदाहरण के लिए या बिना ब्रैकेट के ऑब्जेक्ट ऑब्जेक्ट का उपयोग कर सकते हैं। मैंने 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
अब मैं जाँचने के लिए OBJECT_ID () का उपयोग कर सकता हूं कि क्या तालिका परीक्षण इस तरह से मौजूद है:
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. |
इससे कोई फर्क नहीं पड़ता कि मैं पहचानकर्ता परीक्षण को कोष्ठक के साथ या बिना पास करता हूं, तो कोष्ठक को हटाने के लिए पार्सर काफी स्मार्ट है।
खैर, मैं इसे एक स्केलर फ़ंक्शन को जोड़कर अनुकरण कर सकता हूं जो एक स्ट्रिंग से कोष्ठक हटाता है:
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
और फिर इसे इस तरह से उपयोग करें:
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
लेकिन मेरा सवाल यह है:
- क्या कोई छिपी हुई अंतर्निहित फ़ंक्शन है जो टी-एसक्यूएल का उपयोग करके कोष्ठक को हटाती है?
यहाँ dbfiddle
[
और]
किसी भी के]]
साथ प्रतिस्थापित कर सकते हैं]