Sql server 执行输出参数sql server

Sql server 执行输出参数sql server,sql-server,stored-procedures,join,parameters,Sql Server,Stored Procedures,Join,Parameters,我有三个参数@code是table1.column1的any元素,@date是table2.column2元素的日期,@total是一个输出参数,显示table2.column2元素出现的时间 我想执行一个过程,显示table1.column1和table2.column1之间的内部连接以及date_列;仅在引入@date参数之前的日期 并返回@total中的选定行和 在SQL Server中,在select语句中,不能为变量赋值,也不能返回数据,因此需要执行此查询两次,一次返回预期返回的数据,

我有三个参数@code是table1.column1的any元素,@date是table2.column2元素的日期,@total是一个输出参数,显示table2.column2元素出现的时间

我想执行一个过程,显示table1.column1和table2.column1之间的内部连接以及date_列;仅在引入@date参数之前的日期

并返回@total中的选定行和


在SQL Server中,在select语句中,不能为变量赋值,也不能返回数据,因此需要执行此查询两次,一次返回预期返回的数据,一次为@Total参数赋值

create procedure pro1
  @code int
 ,@date datetime
 ,@total int OUTPUT
AS
BEGIN
  SET NOCOUNT ON;
select table1.column1
    , table2.date_column
from table1 
inner join table2  on table1.column1 = table2.column2
where table1.column1 = @code 
  and CAST(table2.date_column AS DATE) = @date 
  and table2.date_column <= @date

select @total = SUM(table1.column1)
from table1 
inner join table2  on table1.column1 = table2.column2
where table1.column1 = @code 
  and CAST(table2.date_column AS DATE) = @date 
  and table2.date_column <= @date  

END

如果我没看错的话,@total只是返回的行数。如果确实如此,那么您就不必重复查询,也不必处理并发问题,例如在查询之间修改的数据:

create procedure pro1
(
    @code int, @date datetime, @total smallint OUTPUT
)
as
begin
select
    table1.column1,
    table2.date_column
from
    table1
    inner join
    table2 on table1.column1 = table2.column2
where
    table1.column1 = @code
    and
    table2.date_column = @date
    and
    @date <= table2.date_column;

set @total = @@rowcount;
end

你说的是行的总和,你能澄清一下吗?您是指某些列的总和还是行数?谢谢您的帮助,只显示日期参数而不是以前的日期。谢谢!!,使用rowcount函数非常有用。
create procedure pro1
(
    @code int, @date datetime, @total smallint OUTPUT
)
as
begin
select
    table1.column1,
    table2.date_column
from
    table1
    inner join
    table2 on table1.column1 = table2.column2
where
    table1.column1 = @code
    and
    table2.date_column = @date
    and
    @date <= table2.date_column;

set @total = @@rowcount;
end