2014-09-21 134 views
1

我有三個參數@codetable1.column1任何元件,@date是元件table2.column2的日期和@total將是示出了出現在元件table2.column2時代的輸出參數。執行輸出參數SQL服務器

我想執行一個程序,顯示table1.column1table2.column1date_column之間的內部連接;只有在參數@date之前的日期。

而且還@total

create procedure pro1 
    @code int, 
    @date datetime, 
    @total smallint OUTPUT 
as 
    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 
+0

您說「行數之和」 - 你能澄清嗎?你的意思是「(某些列的總和)」或「行數」? – 2014-09-21 15:17:30

回答

0

如果我正確的讀了你,@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 
+0

謝謝!!,使用rowcount函數很有用。 – 2014-09-21 19:54:43

0

返回的行選擇和在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 
+0

感謝您的幫助,只顯示日期參數而不是以前的日期。 – 2014-09-21 15:35:38