sql-server 프로시저 명명 - SQL Server에서 함수 대 저장 프로 시저





8 Answers

SP와 UDF의 차이점은 다음과 같습니다.

+---------------------------------+----------------------------------------+
| Stored Procedure (SP)           | Function (UDF - User Defined           |
|                                 | Function)                              |
+---------------------------------+----------------------------------------+
| SP can return zero , single or  | Function must return a single value    |
| multiple values.                | (which may be a scalar or a table).    |
+---------------------------------+----------------------------------------+
| We can use transaction in SP.   | We can't use transaction in UDF.       |
+---------------------------------+----------------------------------------+
| SP can have input/output        | Only input parameter.                  |
| parameter.                      |                                        |
+---------------------------------+----------------------------------------+
| We can call function from SP.   | We can't call SP from function.        |
+---------------------------------+----------------------------------------+
| We can't use SP in SELECT/      | We can use UDF in SELECT/ WHERE/       |
| WHERE/ HAVING statement.        | HAVING statement.                      |
+---------------------------------+----------------------------------------+
| We can use exception handling   | We can't use Try-Catch block in UDF.   |
| using Try-Catch block in SP.    |                                        |
+---------------------------------+----------------------------------------+
규칙 실행 mssql

나는 함수와 저장 프로 시저를 꽤 오랫동안 배웠지 만, 왜 함수와 저장 프로 시저를 사용해야하는지 모릅니다. 그들은 나에게도 똑같이 보일 것입니다. 아마도 그 일에 관해 초보자이기 때문일 것입니다.

어떤 이유로 말해 줄 수 있습니까?




다른 SQL 문에서 사용할 값을 계산하고 반환하려는 경우 사용자 정의 함수를 작성하십시오. 복잡한 SQL 문 집합을 그룹화하는 것이 필요할 때 저장 프로 시저를 작성하십시오. 결국 두 개의 꽤 다른 사용 사례입니다.




기본 차이점

함수는 값을 반환해야하지만 저장 프로 시저에서는 선택 사항입니다 (프로 시저는 0 또는 n 값을 반환 할 수 있음).

프로시 저는 입력 / 출력 매개 변수를 가질 수있는 반면, 함수는 입력 매개 변수 만 가질 수 있습니다.

함수는 하나의 입력 매개 변수를 취하지 만 필수적이지만 저장 프로 시저는 n 개의 입력 매개 변수를 취할 수 있습니다.

프로 시저에서 함수를 호출 할 수있는 반면 함수에서는 프로 시저를 호출 할 수 없습니다.

사전 차이

프로시 저는 SELECT와 DML (INSERT / UPDATE / DELETE) 문을 허용하지만 Function은 SELECT 문만 허용합니다.

SELECT 문에는 프로 시저를 사용할 수 없지만 SELECT 문에는 함수를 임베드 할 수 있습니다.

저장 프로시 듀어는 WHERE / HAVING / SELECT 절의 SQL 문에서 사용할 수 없지만 Function은 사용할 수 있습니다.

테이블을 반환하는 함수는 다른 행 집합으로 취급 될 수 있습니다. 이것은 다른 테이블과의 JOIN에서 사용될 수 있습니다.

인라인 함수는 매개 변수를 취하는 뷰로 사용할 수 있으며 JOIN 및 다른 행 집합 작업에서 사용할 수 있습니다.

프로 시저에서 try-catch 블록으로 예외를 처리 할 수있는 반면 try-catch 블록은 함수에서 사용할 수 없습니다.

프로 시저에서는 트랜잭션 관리를 사용할 수 있지만 함수에서는 사용할 수 없습니다.

source




저장 프로시 저는 스크립트로 사용됩니다 . 그들은 일련의 명령을 실행하고 특정 시간에 실행되도록 일정을 잡을 수 있습니다.

함수 는 메소드로 사용됩니다. 당신은 그것을 무언가를 전달하고 결과를 리턴합니다. 작고 빨라야합니다. 즉석에서 할 수 있습니다.




저장 프로 시저 :

  • SQL Server의 축소 형 프로그램과 같습니다.
  • select 문과 같이 간단하거나 데이터베이스의 여러 테이블에서 데이터를 추가, 삭제, 업데이트 및 / 또는 읽는 긴 스크립트만큼 복잡 할 수 있습니다.
  • (루프와 커서를 구현할 수 있습니다. 둘 다 작은 결과를 처리하거나 데이터를 행 단위로 조작 할 수 있습니다.)
  • EXEC 또는 EXECUTE 문을 사용하여 호출해야합니다.
  • 테이블 변수를 반환하지만 OUT 매개 변수는 사용할 수 없습니다.
  • 트랜잭션을 지원합니다.

기능:

  • 데이터베이스를 갱신, 삭제 또는 레코드에 추가하는 데 사용할 수 없습니다.
  • 단일 값이나 테이블 값을 반환하기 만하면됩니다.
  • 레코드를 선택하는 데에만 사용할 수 있습니다. 그러나 다음과 같이 표준 SQL 내에서 매우 쉽게 호출 할 수 있습니다.

    SELECT dbo.functionname('Parameter1')
    

    또는

    SELECT Name, dbo.Functionname('Parameter1') FROM sysObjects
    
  • 단순한 재사용 가능한 선택 작업의 경우 함수가 코드를 단순화 할 수 있습니다. 함수에서 JOIN 절을 사용하는 것에 조심하십시오. 함수에 JOIN 절이 있고 여러 결과를 리턴하는 다른 select 문에서 호출하는 경우 해당 함수 호출은 결과 세트에 리턴 된 행에 대해 해당 테이블을 함 2 JOIN 합니다. 따라서 일부 논리를 단순화하는 데 도움이 될 수 있지만 제대로 사용하지 않으면 성능 병목 현상이 될 수 있습니다.

  • OUT 매개 변수를 사용하여 값을 리턴합니다.
  • 거래를 지원하지 않습니다.



SQL Server 기능은 커서와 마찬가지로 마지막 무기로 사용됩니다. 그들은 성능 문제가 있으므로 테이블 값 함수를 사용하는 것은 가능한 한 피해야합니다. 성능에 관해 이야기하는 것은 중산층 하드웨어의 서버에서 호스팅되는 1,000,000 개가 넘는 레코드가있는 테이블을 말하는 것입니다. 그렇지 않으면 함수로 인해 발생하는 성능에 대해 걱정할 필요가 없습니다.

  1. 함수를 사용하여 결과 세트를 외부 코드 (예 : ADO.Net)로 리턴하지 마십시오.
  2. 가능한 한보기 / 저장된 procs 조합을 사용하십시오. DTA (Database Tuning Adviser)가 제공하는 제안 (인덱싱 된 뷰 및 통계와 같은)을 사용하여 향후 성장 성능 문제를 복구 할 수 있습니다 - 때로는!

자세한 내용은 http://databases.aspfaq.com/database/should-i-use-a-view-a-stored-procedure-or-a-user-defined-function.html 참조하십시오.




  • 함수가 저장 프로 시저가 아닌 동안 값을 반환해야하는 것은 필수입니다.
  • Select 문은 UDF에서만 허용되며 DML 문은 필요하지 않습니다.
  • 저장 프로시 저는 DML 문은 물론 모든 문을 허용합니다.
  • UDF는 입력 만 허용하고 출력은 허용하지 않습니다.
  • 저장 프로시 저는 입력과 출력을 모두 허용합니다.
  • 캐치 블록은 UDF에서 사용할 수 없지만 저장 프로시 듀어에서 사용할 수 있습니다.
  • UDF의 기능에서는 허용되지 않지만 스토어드 프로 시저에서는 허용되는 트랜잭션이 허용되지 않습니다.
  • UDF에서는 임시 변수가 아닌 임시 변수 만 사용할 수 있습니다.
  • 저장 프로시 저는 테이블 변수와 임시 테이블을 모두 허용합니다.
  • UDF는 저장 프로시 듀어가 함수를 호출 할 수있는 동안 저장 프로시 듀어를 함수에서 호출하는 것을 허용하지 않습니다.
  • UDF는 조인 절에서 사용되지만 저장 프로 시저는 조인 절에서 사용될 수 없습니다.
  • 저장 프로시 저는 항상 0으로 되돌릴 수 있습니다. 반대로, UDF는 미리 정해진 지점으로 되돌아 와야하는 값을 가지고 있습니다.



  • 프로 시저가 할 수없는 select 문에서 함수를 사용할 수 있습니다.

  • 저장 프로시 저는 입력 및 출력 매개 변수를 모두 사용하지만 함수는 입력 매개 변수 만 사용합니다.

  • 함수는 text, ntext, image 및 timestamps 유형의 값을 프로 시저와 같이 반환 할 수 없습니다.

  • 함수는 create table에서 사용자 정의 데이터 유형으로 사용할 수 있지만 프로 시저에서는 사용할 수 없습니다.

*** 예 : -create table <tablename>(name varchar(10),salary getsal(name))

여기서 getsal은 급여 유형을 반환하는 사용자 정의 함수이며, 테이블이 생성 될 때 급여 유형에 할당 된 저장 장치가 없으며 getsal 함수도 실행되지 않습니다. 그러나이 테이블에서 일부 값을 가져올 때 getsal 함수 get이 실행되고 반환 유형은 결과 집합으로 반환됩니다.




Related