T-SQL 명명 문제
적용 대상: Microsoft Fabric의 SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL 데이터베이스
데이터베이스 프로젝트에서 T-SQL 코드를 분석할 때 하나 이상의 경고가 명명 문제로 분류될 수 있습니다. 다음 상황을 방지하려면 명명 문제를 해결해야 합니다.
- 개체에 지정한 이름이 시스템 개체의 이름과 충돌할 수 있습니다.
- 지정한 이름은 항상 이스케이프 문자로 묶어야 합니다(SQL Server에서는 '[' 및 ']').
- 지정한 이름은 코드를 읽고 이해하려는 다른 사용자를 혼동시킬 수 있습니다.
- SQL Server의 이후 릴리스와 함께 실행하면 코드가 중단될 수 있습니다.
일반적으로 변경할 수 없는 다른 애플리케이션이 현재 이름에 따라 달라지는 경우 명명 문제를 표시하지 않을 수 있습니다.
제공된 규칙은 다음과 같은 명명 문제를 식별합니다.
SR0011: 개체 이름에 특수 문자를 사용하지 마세요.
다음 표의 문자를 사용하여 데이터베이스 개체의 이름을 지정하면 해당 개체를 참조할 뿐만 아니라 해당 개체의 이름이 포함된 코드를 읽기가 더 어려워집니다.
문자 | 설명 |
---|---|
|
공백 문자 |
[ |
왼쪽 대괄호 |
] |
오른쪽 대괄호 |
' |
작은따옴표 |
" |
큰따옴표 |
위반 문제를 해결하는 방법
이 문제를 해결하려면 개체 이름에서 모든 특수 문자를 제거해야 합니다. 데이터베이스 프로젝트의 다른 위치(예: 데이터베이스 단위 테스트)에서 개체를 참조하는 경우 데이터베이스 리팩터링을 사용하여 참조를 업데이트해야 합니다. 자세한 내용은 데이터베이스 개체에 대한 모든 참조 이름 바꾸기를 참조하세요.
예시
첫 번째 예제에서 테이블에는 이름에 특수 문자가 있는 열이 포함됩니다. 두 번째 예제에서는 이름에 특수 문자가 포함되지 않습니다.
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: 형식 이름에 예약어를 사용하지 마세요.
읽기 권한자는 데이터베이스 코드를 이해하는 데 더 많은 시간이 소요되므로 예약어를 사용자 정의 형식의 이름으로 사용하지 않아야 합니다. 구분된 식별자를 사용하는 경우에만 SQL Server에서 예약어를 식별자 및 개체 이름으로 사용할 수 있습니다. 자세한 내용은 예약된 키워드 전체 목록을 참조하세요.
위반 문제를 해결하는 방법
사용자 정의 형식 또는 개체 이름의 이름을 바꿔야 합니다.
예시
첫 번째 예제에서는 이 경고를 트리거하는 사용자 정의 형식에 대한 정의를 보여 줍니다. 두 번째 예제에서는 사용자 정의 형식을 수정하고 문제를 해결하는 한 가지 방법을 보여줍니다.
-- 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: 저장 프로시저의 접두사로 sp_를 사용하지 마세요.
SQL Server에서 sp_
접두사는 시스템 저장 프로시저를 지정합니다. 저장 프로시저에 해당 접두사를 사용하는 경우 프로시저 이름이 나중에 만들어질 시스템 저장 프로시저의 이름과 충돌할 수 있습니다. 이러한 충돌이 발생하면, 애플리케이션이 스키마로 참조를 한정하지 않고 프로시저를 참조하는 경우 애플리케이션이 중단될 수 있습니다. 이 경우 이름은 프로시저 대신 시스템 프로시저에 바인딩됩니다.
위반 문제를 해결하는 방법
이 문제를 해결하려면 사용자 저장 프로시저를 지정하기 위해 sp_
을(를) 다른 접두사로 바꾸거나 접두사를 전혀 사용하지 않아야 합니다.
예시
첫 번째 예제에서는 프로시저 이름으로 인해 이 경고가 발생합니다. 두 번째 예제에서는 프로시저가 sp_
대신 usp_
접두사를 사용하고 경고를 방지합니다.
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