ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • DB 저장프로시저 연습 프로시저 INSERT 문
    Database/MS-SQL 2008. 10. 15. 11:15
    반응형
    프로시저 수정후~!!!!!!! 만들어져서 저장되는시간이걸린다
    그래서 수정후 바로 적용안되는 경우가 있다
    만들고나서 10초정도 딜레이한 시간이 필요하다


    USE pubs


    USE pubs
    CREATE PROC au_info
     @lastname varchar(40),
     @firstname varchar(20)
    AS
    SELECT a.au_lname, a.au_fname, t.title, p.pub_name
    FROM authors AS a INNER JOIN titleauthor AS ta
    ON a.au_id = ta.au_id INNER JOIN titles AS t
    ON t.title_id = ta.title_id INNER JOIN publishers AS p
    ON t.pub_id = p.pub_id
    WHERE a.au_fname = @firstname
    AND a.au_lname = @lastname
    GO 
    -- 저장프로시셔 실행하고 내용확인하는방법

    SELECT * FROM authors

    EXEC au_info 'White','Johnson'




    ALTER PROC au_info
     @lastname varchar(40),
     @firstname varchar(20)
    AS
    SELECT a.au_lname, a.au_fname, t.title, p.pub_name
    FROM authors AS a INNER JOIN titleauthor AS ta
    ON a.au_id = ta.au_id INNER JOIN titles AS t
    ON t.title_id = ta.title_id INNER JOIN publishers AS p
    ON t.pub_id = p.pub_id
    WHERE a.au_fname = @firstname
    AND a.au_lname = @lastname
    GO 
    -- 저장프로시셔 실행하고 내용확인하는방법

    SELECT * FROM authors

    EXEC au_info 'White','Johnson'



    CREATE PROC myCalc -- 프로시저 만들어
    @val1 int = 0,
    @val2 int = 0,
    @result int OUTPUT -- 결과를 돌려받을때는 OUTPUT 으로 적는다
    AS -- 출력 매개 변수 쓰는방법(OUTPUT)
    SET @result = @val1 + @val2
    GO

    DECLARE @returnVal INT
    EXEC MyCalc 123 , 321 , @returnVal OUTPUT   --  OUTPUT은화면에 출력하는것이다
    SELECT @returnVal -- PRINT @returnVal -- 출력 매개변수를 쓰는방법






    WITH ENCRYPTION -- 암호화 됩니다 내용을 볼수가 없게되요



    WITH RECOMPILE -- 다음에 실행할때도 최적화시킨다 -- 쓰면 좋다고 나와있다







    --USE Pubs
    --IF object_id('usp_JobsInsert') IS NOT NULL
    --  DROP PROC msp_JobsInsert
    --GO
    CREATE PROC usp_JobsInsert -- 프로시저 생성
    --@job_id   smallint    --> IDENTITY 열이므로 사용 불가
      @job_desc varchar(50) = '불가능값'  -- NOT NULL & DEFAULT(s)
    , @min_lvl tinyint = 0 -- 크기가 125까지밖에 못넣는다
    , @max_lvl tinyint = 0 -- 출력매개변수없다
    AS
      BEGIN TRAN
      DECLARE @ERR int -- 에러났을떄 에러값(정수)을 담는 변수
      DECLARE @ID smallint    -- @@IDENTITY 결과값 담을 변수 선언
      /* 인자들로 일단 행 삽입(생략된 인자들도 포함). */
      INSERT INTO jobs (job_desc, min_lvl, max_lvl)
        VALUES (@job_desc, @min_lvl, @max_lvl)
      SET @ERR = @@ERROR -- @@ 골배잉 2개는 시스템변수( 에러값은 숫자)
      IF @ERR <> 0  GOTO ERROR

      SET @ID = @@IDENTITY  -- 방금 사용된 IDENTITY 값을 보관

      /* 해당 열 값들을 열의 기본값으로 수정함 */
      IF @job_desc = '불가능값'
        BEGIN
          UPDATE jobs
            SET job_desc = DEFAULT
            WHERE job_id = @ID
          SET @ERR = @@ERROR
          IF @ERR <> 0  GOTO ERROR
        END
      COMMIT

      RETURN @ID  -- IDENTITY 값을 반환함

    ERROR: -------GOTO ERROR
      DECLARE @error_msg nvarchar(400)
      SET @error_msg = dbo.sfn_MakeErrMsg('usp_JobsInsert', @ERR, DEFAULT)
      RAISERROR( @error_msg, 16, 1 )
      ROLLBACK
    GO





    프로시저 인서트문 INSERT










    USE Pubs
    IF object_id('usp_JobsInsert') IS NOT NULL
      DROP PROC msp_JobsInsert
    GO
    CREATE PROC usp_JobsInsert -- 프로시저 생성
    --@job_id   smallint    --> IDENTITY 열이므로 사용 불가
      @job_desc varchar(50) = '불가능값'  -- NOT NULL & DEFAULT(s)
    , @min_lvl tinyint = 0 -- 크기가 255 까지밖에 못넣는다
    , @max_lvl tinyint = 0 -- 출력매개변수없다
    AS
      BEGIN TRAN
      DECLARE @ERR int -- 에러났을떄 에러값(정수)을 담는 변수
      DECLARE @ID smallint    -- @@IDENTITY 결과값 담을 변수 선언
      /* 인자들로 일단 행 삽입(생략된 인자들도 포함). */
      INSERT INTO jobs 
    (job_desc, min_lvl, max_lvl)
        VALUES 
    (@job_desc, @min_lvl, @max_lvl)
      SET @ERR = @@ERROR -- @@ 골배잉 2개는 시스템변수( 에러값은 숫자)
      IF @ERR <> 0  GOTO ERROR
      SET @ID = @@IDENTITY  -- 방금 사용된 IDENTITY 값을 보관 -- 증가하는값
      /* 해당 열 값들을 열의 기본값으로 수정함 */
      IF @job_desc = '불가능값'
        BEGIN -- c#의 IF() '{' <--를 의미
          UPDATE jobs
            SET job_desc = DEFAULT
            WHERE job_id = @ID
          SET @ERR = @@ERROR
          IF @ERR <> 0  GOTO ERROR
        END -- c#의 IF() '}' <--를 의미
      COMMIT
      RETURN @ID  -- IDENTITY 값을 반환함

    ERROR: -------GOTO ERROR
      DECLARE @error_msg nvarchar(400)
      SET @error_msg = dbo.sfn_MakeErrMsg('usp_JobsInsert', @ERR, DEFAULT)
    -- sfn_MakeErrMsg의 함수를 에러메세지를 넣어서 실행
      RAISERROR( @error_msg, 16, 1 )
      ROLLBACK
    GO



    SELECT * FROM jobs
    EXEC usp_jobsInsert DEFAULT ,100,200











    반응형

    댓글

Designed by Tistory.