sql - 将 VariableTable 从存储过程返回到另一个

标签 sql sql-server-2008 stored-procedures

这不是一个问题,我只是想分享一个可能对开发者有帮助的想法

此示例模拟如何将变量表从过程返回到另一个过程

示例程序

Create Proc [dbo].[ReturnVariableTable] (
    @_PersonID uniqueidentifier, @_fromdate date , @_Todate date 
    @obj_cursor cursor varying output
) as
Begin Try
    Begin Tran
DECLARE @PersonSalaryOverYear Table(_Salary Float  ,PersonID uniqueidentifier ,Month Int )
declare @tempdate = @_fromdate 
while ( @tempdate <= @_Todate )
BEGIN

declare @_Salary FLOAT = (select Salary from Person where ID = @_PersonID AND Month(@tempdate) = MonthNumber   ) 
insert into @PersonSalaryOverYear values(@_Salary, @_PersonID,Month(@tempdate) )
select  @tempdate = DATEADD(Month,1,@tempdate)

END 


    Set @obj_cursor = cursor forward_only static for
        select @_Salary as Salary, @_PersonID as PersonID ,Month(@tempdate) as Month 

    Open @obj_cursor

    Commit
End Try

如何调用

Declare @cur Cursor
Declare @_Salary Float
Declare @_PersonID uniqueidentifier 
Declare @Month int
Exec ReturnMultipleData 
    @_PersonID = '2121ad51-fa84-4da4-a9e6-c22e259d549e',@_fromdate='10-01-2013' ,       @_Todate='10-31-2013'
    @obj_cursor = @cur OUTPUT 

Fetch Next From @cur into @_Salary,  @_PersonID,@Month
While @@fetch_status = 0
Begin
   print @_Salary
   print @_PersonID
   print @Month

   Fetch Next From cur into  @_Salary,  @_PersonID,@Month
End
Close @cur
Deallocate @cur

最佳答案

除非您要在光标中包含多行,否则这更简单:

Create Proc dbo.ReturnMultipleData 
    @PersonID uniqueidentifier,
    @Salary decimal(10, 2) out,
    @Att uniqueidentifier out
As

Select
    @Salary = p.Salary,
    @Att = a.AttendanceID
From
    Person p
        Left Outer Join
    VPerson_AttendanceNumber a
        On p.ID = a.PersonID
Where
    p.ID = @PersonID

关于sql - 将 VariableTable 从存储过程返回到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19477590/

相关文章:

python - 一个好的 blobstore/memcache 解决方案

sql-server-2008 - SQL Reporting Services 2008 在 native 模式下启动缓慢

sql - 如何查找重叠时间段内可用的最大容量 SQL Server 2008

java - HibernateCallback 最适合执行 SQL/过程吗?

MySQL。平均价格,连接两个数据库

sql - 您可以在 select 命令中创建一个 case 语句来评估两个不同的表字段吗?

MySQL,执行选择和过滤结果的查询

SQL - 从一组记录中选择最大值

postgresql - 在函数内插入失败,返回 "query has no destination for result data"

c# - 使用 ADO (c#) 执行 Oracle 存储过程