우리는 지금 10-12 년 된 오래된 프로젝트를 가지고 있습니다. 그것은 우리가 SQL2008로 옮긴 SQL2000을 사용하고있었습니다.저장 프로 시저의 동적으로 형성된 SQL은 저장 프로 시저의 목적을 부정합니다?
이 작업을 수행하는 동안 저장 프로 시저가 매개 변수를 수락했다가 쿼리를 문자열로 구성한 다음 EXEC를 사용하여 명령을 실행하는 것으로 나타났습니다.
CREATE PROCEDURE MyProc
(@TableName varchar(255),
@FirstName varchar(50),
@LastName varchar(50))
AS
-- Create a variable @SQLStatement
DECLARE @SQLStatement varchar(255)
-- Enter the dynamic SQL statement into the
-- variable @SQLStatement
SELECT @SQLStatement = "SELECT * FROM " +
@TableName + "WHERE FirstName = '"
+ @FirstName + "' AND LastName = '"
+ @LastName + "'"
-- Execute the SQL statement
EXEC(@SQLStatement)
이 방법이 좋지 않습니다. 이로 인해 저장 프로 시저 (미리 컴파일 된 쿼리 이점)의 이점이 사라지나요?
그런 목적으로 select를 수행하는 것이 유일한 목적이라면 나쁜 생각 인 것처럼 보이지만 성능상의 이유로 디자인이 좋지 않기 때문입니다. – JNK
+1 질문, 나는 이것이 단지 예일 뿐이라는 것을 이해합니다. 일반적으로 질문입니다. 이것은 저장 프로 시저의 이점을 없애 줍니까? 더 복잡한 sproc에서 가정 해 봅시다. –
예, SP는 단순한 예일뿐입니다.하지만 걱정되는 것은 정말 크고 못생긴 것입니다. 중간 선택 구문을 작성하고 중간에 임시 테이블을 채우는 것과 같은 패턴이 다음과 같이 있습니다. 페이지 매김 ... 그리고 물건 –