SQL Server:如何创建存储过程

Spa*_*323 23 t-sql sql-server

我正在从书中学习SQL,我正在尝试编写存储过程,但我不相信我正确地做了.以下方式在Microsoft SQL中无效吗?如果没有,什么时候有效,如果有的话?

create procedure dept_count(in dept_name varchar(20), out d_count integer)
   begin
     select count(*) into d_count
     from instructor
     where instructor.dept_name=dept_count.dept_name
   end
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

消息156,级别15,状态1,过程wine_change,第1行关键字'in'附近的语法不正确.

小智 34

T-SQL

/* 
Stored Procedure GetstudentnameInOutputVariable is modified to collect the
email address of the student with the help of the Alert Keyword
*/



CREATE  PROCEDURE GetstudentnameInOutputVariable
(

@studentid INT,                   --Input parameter ,  Studentid of the student
@studentname VARCHAR (200) OUT,    -- Output parameter to collect the student name
@StudentEmail VARCHAR (200)OUT     -- Output Parameter to collect the student email
)
AS
BEGIN
SELECT @studentname= Firstname+' '+Lastname, 
    @StudentEmail=email FROM tbl_Students WHERE studentid=@studentid
END
Run Code Online (Sandbox Code Playgroud)


Dee*_*kha 11

在输入参数的T-SQL存储过程中,不需要显式'in'关键字,对于输出参数,需要显式的'Output'关键字.有问题的查询可以写成:

CREATE PROCEDURE dept_count 
    (
    -- Add input and output parameters for the stored procedure here
    @dept_name varchar(20), --Input parameter 
    @d_count int OUTPUT     -- Output parameter declared with the help of OUTPUT/OUT keyword
    ) 
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

     -- Statements for procedure here
    SELECT @d_count = count(*)
    from instructor
      where instructor.dept_name=@dept_name

END
GO
Run Code Online (Sandbox Code Playgroud)

并执行上述程序,我们可以写为:

Declare @dept_name varchar(20), -- Declaring the variable to collect the dept_name
        @d_count int            -- Declaring the variable to collect the d_count 
SET @dept_name = 'Test'

Execute  dept_count @dept_name,@d_count output
SELECT   @d_count               -- "Select" Statement is used to show the output 
Run Code Online (Sandbox Code Playgroud)


Ami*_*arz 1

尝试这个:

 create procedure dept_count(@dept_name varchar(20),@d_count int)
       begin
         set @d_count=(select count(*)
                       from instructor
                        where instructor.dept_name=dept_count.dept_name)
         Select @d_count as count
       end
Run Code Online (Sandbox Code Playgroud)

或者

create procedure dept_count(@dept_name varchar(20))
           begin
            select count(*)
                           from instructor
                            where instructor.dept_name=dept_count.dept_name
           end
Run Code Online (Sandbox Code Playgroud)