SQL Server에서 함수 대 저장 프로 시저



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.    |                                        |
+---------------------------------+----------------------------------------+
Question

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

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




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




단일 값을 반환하는 함수로 시작하십시오. 좋은 점은 자주 사용되는 코드를 함수에 넣고 결과 집합의 열로 반환 할 수 있다는 것입니다.

그런 다음 매개 변수화 된 도시 목록에 함수를 사용할 수 있습니다. dbo.GetCitiesIn ( "NY") 조인으로 사용할 수있는 테이블을 반환합니다.

그것은 코드를 구성하는 방법입니다. 무언가를 재사용 할 수 있고 언제 시간 낭비인지 아는 것은 시행 착오와 경험을 통해서만 얻을 수 있습니다.

또한 함수는 SQL Server에서 좋은 아이디어입니다. 그들은 더 빠르며 아주 강력 할 수 있습니다. 인라인 및 직접 선택. 과용하지 않도록 조심하십시오.




다음 요점이 도움이 될만한 것을 사용할시기를 결정하려면 -

  1. 저장 프로시 저는 함수로 할 수있는 테이블 변수를 리턴 할 수 없습니다.

  2. 저장 프로 시저를 사용하여 함수를 사용할 수없는 서버 환경 매개 변수를 변경할 수 있습니다.

건배




SQL Server에서 함수와 저장 프로 시저는 두 가지 유형의 엔터티입니다.

기능 : SQL Server 데이터베이스에서 함수는 일부 작업을 수행하는 데 사용되며 작업은 결과를 즉시 반환합니다. 함수는 두 가지 유형입니다.

  1. 정의 된 시스템

  2. 사용자 정의

저장 프로 시저 : SQL Server에서 저장 프로 시저는 서버에 저장되며 0, 단일 및 다중 값을 반환 할 수 있습니다. 저장 프로 시저에는 두 가지 유형이 있습니다.

  1. 시스템 저장 프로 시저
  2. 사용자 정의 프로 시저



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

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




사용자 정의 함수 (User Defined Function)는 SQL Server 프로그래머가 사용할 수있는 중요한 도구입니다. 당신은 SQL 문에서 인라인으로 사용할 수 있습니다.

SELECT a, lookupValue(b), c FROM customers 

여기서 lookupValue 는 UDF가됩니다. 이러한 종류의 기능은 저장 프로 시저를 사용할 때 불가능합니다. 동시에 UDF에서 특정 작업을 수행 할 수 없습니다. 여기에서 기억해야 할 기본적 사항은 UDF의 것입니다.

  • 영구 변경을 만들 수 없습니다.
  • 데이터를 바꿀 수 없다.

스토어드 프로시 저는 이러한 작업을 수행 할 수 있습니다.

나에게 UDF의 인라인 사용은 UDF의 가장 중요한 사용법이다.




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

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

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

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

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

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




Related