본질적으로 차이는 없습니다. 함수에는 하나의 변수만 반환할 수 있다는 제한이 있습니다. 저장 프로시저는 여러 개를 반환할 수 있습니다. 함수는 SQL에 포함될 수 있고 선택에서 호출될 수 있지만 저장 프로시저는 그럴 수 없습니다. 실행의 본질은 동일합니다.
함수에 대한 제한이 많습니다. 예를 들어 임시 테이블을 사용할 수 없고, 테이블 변수만 사용할 수 있습니다. 저장 프로시저에 대한 제한은 상대적으로 적습니다.
1. 일반적으로 저장 프로시저에 의해 구현되는 함수는 더 복잡하고, 함수에 의해 구현되는 함수는 더 타겟이 높습니다.
2. 저장 프로시저는 매개변수를 반환할 수 있는 반면, 함수는 값이나 테이블 객체만 반환할 수 있습니다.
3. 저장 프로시저는 일반적으로 독립적인 부분으로 실행되지만, 함수는 쿼리문의 일부로 호출될 수 있으므로 테이블 개체를 반환할 수 있으므로 쿼리의 FROM 키에 위치할 수 있습니다. 진술 뒤에.
4. 저장 프로시저와 함수가 실행되면 SQL Manager는 프로시저 캐시로 이동하여 해당 쿼리 문을 가져옵니다. 프로시저 캐시에 해당 쿼리 문이 없으면 SQL 관리자는 저장 프로시저를 검색합니다. 그리고 함수가 컴파일됩니다.
프로시저 캐시에 저장되는 것은 실행 계획입니다. 컴파일된 후 프로시저 캐시에 있는 실행 계획이 실행됩니다. 이후 SQL SERVER는 이를 기반으로 캐시에 추가할지 여부를 고려합니다. 각 실행 계획의 실제 상황 이 계획을 저장할 때 첫 번째 기준은 이 실행 계획을 사용할 수 있는 빈도이며 두 번째 기준은 이 계획을 생성하는 데 드는 비용, 즉 컴파일하는 데 걸리는 시간입니다. 캐시에 저장된 계획은 다음에 실행될 때 컴파일할 필요가 없습니다.
저장 프로시저와 사용자 정의 함수의 구체적인 차이점
먼저 정의를 살펴보겠습니다.
저장 프로시저
저장 프로시저를 사용하면 데이터베이스 관리가 가능합니다. , 데이터베이스와 해당 사용자에 대한 정보를 표시하는 것이 훨씬 쉽습니다. 저장 프로시저는 이름으로 저장되고 하나의 단위로 처리되는 SQL 문과 선택적 제어 흐름 문의 미리 컴파일된 컬렉션입니다. 저장 프로시저는 데이터베이스에 저장되며 호출을 통해 애플리케이션에서 실행될 수 있으며 사용자가 변수 선언, 조건부 실행 및 기타 강력한 프로그래밍 기능을 사용할 수 있도록 합니다.
저장 프로시저에는 데이터베이스에 대한 프로그램 흐름, 논리 및 쿼리가 포함될 수 있습니다. 매개변수, 출력 매개변수를 허용하고, 단일 또는 다중 결과 세트를 반환하고, 값을 반환할 수 있습니다.
저장 프로시저는 SQL 문을 사용하는 모든 목적에 사용할 수 있으며 다음과 같은 장점이 있습니다.
단일 저장 프로시저에서 일련의 SQL 문을 실행할 수 있습니다.
자체 저장 프로시저 내에서 다른 저장 프로시저를 참조하여 일련의 복잡한 문을 단순화할 수 있습니다.
저장 프로시저가 생성되면 서버에서 컴파일되므로 단일 SQL 문보다 빠르게 실행됩니다.
사용자 정의 함수
함수는 재사용을 위해 코드를 캡슐화하는 데 사용할 수 있는 하나 이상의 Transact-SQL 문으로 구성된 서브루틴입니다. Microsoft® SQL Server® 2000은 사용자를 Transact-SQL 언어의 일부로 정의된 기본 제공 함수로 제한하지 않고 대신 사용자가 자신만의 사용자 정의 함수를 만들 수 있도록 허용합니다.
사용자 정의 함수는 CREATE FUNCTION 문을 사용하여 생성하고, ALTER FUNCTION 문을 사용하여 수정하고, DROP FUNCTION 문을 사용하여 제거할 수 있습니다. 완전히 유효한 각 사용자 정의 함수 이름(database_name.owner_name.function_name)은 고유해야 합니다.
사용자 정의 함수를 생성, 수정, 제거하려면 CREATE FUNCTION 권한을 부여받아야 합니다. 소유자가 아닌 사용자가 Transact-SQL 문의 함수를 사용하려면 먼저 해당 사용자에게 함수에 대한 적절한 권한을 부여받아야 합니다. CHECK 제약 조건, DEFAULT 절 또는 계산 열 정의에서 사용자 정의 함수를 참조하는 테이블을 만들거나 변경하려면 해당 함수에 대한 REFERENCES 권한도 있어야 합니다.