-1

varchar(max)SQL Server 2008 のストアド プロシージャからを返したいです。

だから私は試しました:

alter proc SpSignup(
    @username varchar(max),
    @email varchar(max),
    @password varchar(max),
    @warning varchar(max) output)
as
   if exists(select email from [login] where email=@email)
      return 'email already exists';

   insert into [login](username, email, password) 
   values(@username, @email, @password)

varcharメールがテーブルに存在する場合は値 ( )を返したいのですが、パラメーターとして何も指定'email already exists'したくありません。@warning

しかし、@warning para is not supplyingこのprocを実行した後

メッセージ 201、レベル 16、状態 4、プロシージャ SpSignup、行 0
プロシージャまたは関数 'SpSignup' には、指定されていないパラメータ '@warning' が必要です。

また、出力も表示されません ( 'email already exists')

4

1 に答える 1

2

@usernameプロシージャにパラメータを指定するのを忘れました

declare @warning varchar(max)

exec SpSignup
    @username = 'Bill', 
    @email = 'Bill@gmail.com',
    @password = '12345',
    @warning = @warning output

select @warning

UPDATE : プロシージャから変数を返すことはできません。変数をパラメーターvarcharとして渡すか、outputコーディングするselect 'email already exists'か、print 'email already exists'

alter proc SpSignup
(
    @username varchar(max),
    @email varchar(max),
    @password varchar(max)
)
as
begin
    if exists(select email from [login] where email=@email)
    begin
        select 'email already exists'
        print 'email already exists'
        return
    end

    insert into [login](username, email, password) values(@username, @email, @password)
end
于 2012-10-28T15:25:29.433 に答える