【问题标题】:Using Table returned from function in SQL Server使用从 SQL Server 中的函数返回的表
【发布时间】:2015-02-02 21:37:19
【问题描述】:

我有一个返回表的 SQL Server 函数。表的结构是ID INTEGER,SortOrder INTEGER。

ALTER FUNCTION dbo.ParseStringByPipe(@InputList VARCHAR(8000) 
RETURNS @SortedList TABLE (ID INTEGER, SortOrder INTEGER))

我有一个存储过程 dbo.AdjustSortOrder 存储过程接受一个参数 @InputList VARCHAR(8000) 该输入参数的值将是一个逗号分隔的数字列表,两对,代表 ID 和新的排序顺序那个id。前任。 1,2,3,4(id 1排序顺序2,id 3排序顺序4)

在存储过程中,我正在调用该函数。然后我想从该函数获取返回值并根据函数返回的值更新表。返回的日期将如下所示:

ID                    SortOrder
-------------------------------
1                     5
2                     2
3                     7

我正在更新一个名为 dbo.Orders 的表,设置 sortorder 字段 = 排序顺序,其中 id = 返回表中的 id。如果我错了,请纠正我,但我相信最好的方法是使用内部连接进行更新,即

UPDATE 
    dbo.Orders 
SET 
    Orders.SortOrder = rt.SortOrder 
FROM 
    dbo.Orders ot 
INNER JOIN 
    SortedList sl
ON
    ot.ID = sl.ID

我遇到的第一个问题是如何使用存储过程内部函数的返回值,第二个问题是内部连接是完成手头任务的最有效方式吗?提前感谢您的所有帮助。

【问题讨论】:

    标签: sql-server tsql stored-procedures user-defined-functions


    【解决方案1】:

    您实际上只是在函数中添加子并将其视为表格。一般需要在前面加上“dbo”。

    INNER JOIN dbo.SortedList(@InputList) sl ON ot.ID = sl.ID

    【讨论】:

    • 谢谢你,我想我已经把它复杂化了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    相关资源
    最近更新 更多