首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Server:如何创建存储过程

Server:如何创建存储过程
EN

Stack Overflow用户
提问于 2013-11-13 07:29:44
回答 8查看 125.1K关注 0票数 26

我正在从一本书中学习sql,我正在尝试编写一个存储过程,但我不相信我做得对。下列方法在Microsoft中无效吗?如果没有,什么时候有效?

代码语言:javascript
代码运行次数:0
运行
复制
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

我得到以下错误

Msg 156,第15级,状态1,过程wine_change,第1行在关键字'in‘附近不正确的语法。

EN

回答 8

Stack Overflow用户

发布于 2013-11-13 07:33:58

T-SQL

代码语言:javascript
代码运行次数:0
运行
复制
/* 
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
票数 36
EN

Stack Overflow用户

发布于 2013-11-13 10:02:41

在T存储过程中,输入参数不需要显式“In”关键字,对于输出参数,需要显式“输出”关键字。有关的查询可以写成:

代码语言:javascript
代码运行次数:0
运行
复制
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

为了执行上述过程,我们可以写成:

代码语言:javascript
代码运行次数:0
运行
复制
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 
票数 11
EN

Stack Overflow用户

发布于 2015-07-23 13:13:48

我觉得它能帮到你:

代码语言:javascript
代码运行次数:0
运行
复制
CREATE PROCEDURE DEPT_COUNT
(
    @DEPT_NAME VARCHAR(20), -- Input parameter
    @D_COUNT INT OUTPUT     -- Output parameter
    -- Remember parameters begin with "@"
)
AS -- You miss this word in your example
BEGIN
    SELECT COUNT(*) 
    INTO #D_COUNT -- Into a Temp Table (prefix "#")
    FROM INSTRUCTOR
    WHERE INSTRUCTOR.DEPT_NAME = DEPT_COUNT.DEPT_NAME
END

然后,您可以这样调用SP,例如:

代码语言:javascript
代码运行次数:0
运行
复制
DECLARE @COUNTER INT
EXEC DEPT_COUNT 'DeptName', @COUNTER OUTPUT
SELECT @COUNTER
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19947878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档