SR0001: 저장 프로시저, 뷰 및 테이블 반환 함수에 SELECT *를 사용하지 않습니다.

규칙 ID

SR0001

범주

Microsoft.Design

변경 수준

주요 변경 아님

원인

저장된 프로시저, 뷰 또는 테이블 반환 함수 중 하나 이상이 SELECT *를 포함합니다.

규칙 설명

테이블이나 뷰의 모든 열을 선택하기 위해 저장된 프로시저, 뷰 또는 테이블 반환 함수에 와일드카드 문자를 사용하는 경우 기본 테이블 또는 뷰가 변경되면 반환된 열의 번호나 열 셰이프가 변경될 수 있습니다. 열의 쉐이프는 형식 및 크기의 조합입니다. 이 가변성으로 인해 이러한 소비자가 다른 열 수를 예상하기 때문에 저장된 프로시저, 뷰 또는 테이블 반환 함수를 사용하는 응용 프로그램에서 문제가 발생할 수 있습니다.

위반 문제를 해결하는 방법

와일드카드 문자를 정규화된 열 목록 이름으로 바꾸어 스키마 변경으로부터 저장 프로시저, 뷰 또는 테이블 반환 함수의 소비자를 보호할 수 있습니다. 리팩터링을 사용하여 와일드카드 문자를 쉽게 확장할 수 있습니다. 자세한 내용은 SELECT 문에서 와일드카드 문자 확장을 참조하십시오.

경고를 표시하지 않는 경우

이 규칙으로 식별되는 문제를 해결하면 코드에 의존하는 응용 프로그램이 이후에 중단되는 것을 방지할 수 있습니다. 이 경고는 반드시 표시해야 합니다.

예제

다음 예제에서는 먼저 이름이 [Table2]인 테이블을 정의한 다음 두 개의 저장된 프로시저를 정의합니다. 첫 번째 프로시저에 SELECT *이 포함되어 있으며 규칙 SR0001을 위반합니다. 두 번째 절차에서는 SELECT *를 사용하지 않으며 SELECT 문에서 열을 명시적으로 나열합니다.

CREATE TABLE [dbo].[Table2] 
( 
[ID] INT NOT NULL IDENTITY(0, 1), 
[c1] INT NOT NULL , 
[Comment] VARCHAR (50)
)
ON [PRIMARY]

CREATE PROCEDURE [dbo].[procWithWarning]
AS 
BEGIN
-- Contains code that breaks rule SR0001
SELECT * 
FROM [dbo].[Table2] 
END

CREATE PROCEDURE [dbo].[procFixed]
AS 
BEGIN
-- Explicitly lists the column names in a SELECT statement
SELECT [dbo].[Table2].[ID], [dbo].[Table2].[c1], [dbo].[Table2].[Comment]
FROM [dbo].[Table2] 
END

참고 항목

개념

SELECT 문에서 와일드카드 문자 확장

데이터베이스 코드를 분석하여 코드 품질 향상