다음을 통해 공유


T-SQL 명명 문제

적용 대상: Microsoft Fabric의 SQL ServerAzure 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