때로는 일부 데이터베이스 (예 : 일부 매개 변수 테이블)에 객체 이름 (식별자)을 저장합니다. '='또는 '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 ()를 사용하여 TEST 테이블이 이런 식으로 존재하는지 확인할 수 있습니다.
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. |
대괄호를 사용하거나 사용하지 않고 식별자 TEST를 전달해도 상관 없습니다. 파서는 대괄호를 제거하기에 충분합니다.
하나의 문자열에서 대괄호를 제거하는 스칼라 함수를 추가하여이를 시뮬레이션 할 수 있습니다.
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
그러나 내 질문은 :
- T-SQL을 사용하여 괄호를 제거하는 숨겨진 내장 기능이 있습니까?
여기 dbfiddle
[
과]
및 교체]]
와 함께]