○ ストアドプロシージャ



■単純なストアドプロシージャの作成

create procedure dbo.test
as
select 'test procedure'

▼実行

execute dbo.test

▼実行結果

test procedure

▼ストアドプロシージャの削除

drop procedure dbo.test




■戻り値を返すストアドプロシージャ

戻り値としての RETURN 文は整数型の値しか返せません。

create procedure dbo.test
as
return 1




■return の戻り値の取り方

DECLARE @r INT
execute @r=dbo.test
select @r




■引数を取るストアドプロシージャ

create procedure dbo.test
@i INT
as
select 'test procedure' + cast(@i as VARCHAR)

▼実行

execute dbo.test 100

▼実行結果

test procedure100




■複数の引数を取るストアドプロシージャ

create procedure dbo.test
@str1 VARCHAR(10),@str2 VARCHAR(10)
as
select @str1 + @str2

▼実行

execute dbo.test 'aaaa','bbbb'

▼実行結果

aaaabbbb




■ローカル変数を使う

create procedure dbo.test
@str1 VARCHAR(10),@str2 VARCHAR(10)
as
DECLARE @str VARCHAR(20)

set @str = @str1 + @str2
SELECT @str




■出力パラメータ

2つの引数に値を入れて返します

create procedure dbo.test
@i INT OUTPUT,@j INT OUTPUT
as
select @i=1
select @j=2


▼出力パラメータから値の取得

DECLARE @i INT
DECLARE @j INT
execute dbo.test @i OUTPUT,@j OUTPUT
select @i
select @j




■IF文

create procedure dbo.test
@str VARCHAR(10)
as
DECLARE @i INT
IF @str='a'
    BEGIN
        SET @i=10
    END
ELSE
    BEGIN
        SET @i=100
    END
SELECT @i

▼実行

execute dbo.test 'a'

▼実行結果

10




■WHILE文

create procedure dbo.test
as
DECLARE @i INT
DECLARE @j INT

SET @i=0
SET @j=0

WHILE @i<10
    BEGIN
        SET @i = @i + 1
        SET @j = @j + @i
    END
SELECT @j

▼実行

execute dbo.test

▼実行結果

55




■クエリの結果をローカル変数に入れる

▼countの結果をローカル変数に入れます

create procedure dbo.test
as
DECLARE @i INT
SET @i=(select count(*) from table1)
SELECT @i


▼select 文の1つだけの結果がローカル変数に入ります。

create procedure dbo.test
as
DECLARE @i INT
SET @i=(select top 1 ID from table1)
SELECT @i




■クエリの結果を総て返す

▼IF文の結果により、select文の結果を総て返す


create procedure dbo.test
@str VARCHAR(10)
as
IF @str='a'
    BEGIN
        select * from table1
    END
ELSE
    BEGIN
        select ID from table1
    END




■エラー処理


BEGIN TRY
BEGIN TRANSACTION
--エラーが起こりそうな構文
COMMIT TRANSACTION
END TRY

BEGIN CATCH
ROLLBACK TRANSACTION
--エラー時の処理
return ERROR_NUMBER()
END CATCH


▲トップページ > SQL 関連