Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server:如何创建存储过程_Sql Server_Tsql - Fatal编程技术网

Sql server SQL Server:如何创建存储过程

Sql server SQL Server:如何创建存储过程,sql-server,tsql,Sql Server,Tsql,我正在从一本书中学习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_cou

我正在从一本书中学习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
我得到以下错误


味精156,15级,状态1,程序变更,第1行 关键字“in”附近的语法不正确

试试这个:

 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

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
这样创造

Create procedure dept_count(dept_name varchar(20),d_count integer)
   begin
     select count(*) into d_count
     from instructor
     where instructor.dept_name=dept_count.dept_name
   end
试试这个:

create procedure dept_count( @dept_name varchar(20), @d_count INTEGER out)

   AS
   begin
     select count(*) into d_count
     from instructor
     where instructor.dept_name=dept_count.dept_name
   end

在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
要执行上述过程,我们可以写为:

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 

我认为它可以帮助您:

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,例如:

DECLARE @COUNTER INT
EXEC DEPT_COUNT 'DeptName', @COUNTER OUTPUT
SELECT @COUNTER


在SQL server management studio中创建SQL server存储过程的步骤

  • 扩展数据库
  • 以编程方式展开
  • 右键单击存储过程并选择“新建存储过程”
现在,编写存储过程,例如,它可以是如下所示

USE DatabaseName;  
GO  
CREATE PROCEDURE ProcedureName 
 @LastName nvarchar(50),   
 @FirstName nvarchar(50)   
AS   

SET NOCOUNT ON;  
 
//Your SQL query here, like
Select  FirstName, LastName, Department  
FROM HumanResources.vEmployeeDepartmentHistory  
WHERE FirstName = @FirstName AND LastName = @LastName  
GO  
其中,DatabaseName=数据库的名称
ProcedureName=SP的名称
InputValue=您的输入参数值(@LastName和@FirstName)和type=参数类型示例nvarchar(50)等

资料来源:

要执行上述存储过程,可以使用下面的示例查询

EXECUTE ProcedureName @FirstName = N'Pilar', @LastName = N'Ackerman';  

你有什么错误?你有什么问题?味精156,15级,状态1,程序改变,第1行关键字“in”附近的语法不正确。删除
in
关键字语法为Oracle PL/SQLD_count还会返回吗?@eric:您想在查询中返回d_count作为讲师的计数吗?@a_horse_和_no_name:我说的是sql server dude。@a_horse_和_no_name:问题标签是Tsql和sql server。这是怎么回事和原来的不同?这将如何在MS SQL Server上工作?原始版本的参数有
IN
关键字。这将在SQL Server中起作用。我认为在t-SQL中将查询结果存储到变量中时,所示的
转换为
在t-SQL中是无效的。您将t-SQL参数(@dept\u name)与Oracle语法混合在一起。这肯定行不通。
Table Name :   TB_StdFunction


S_No  INT PRIMARY KEY AUTO_INCREMENT
S_Name nvarchar(50)
S_Address nvarchar(500)
CreatedDate nvarchar(50)
ModifiedDate nvarchar(50)
USE DatabaseName;  
GO  
CREATE PROCEDURE ProcedureName 
 @LastName nvarchar(50),   
 @FirstName nvarchar(50)   
AS   

SET NOCOUNT ON;  
 
//Your SQL query here, like
Select  FirstName, LastName, Department  
FROM HumanResources.vEmployeeDepartmentHistory  
WHERE FirstName = @FirstName AND LastName = @LastName  
GO  
EXECUTE ProcedureName @FirstName = N'Pilar', @LastName = N'Ackerman';