我正在从书中学习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)
尝试这个:
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)