函数sql server 2012中的事务

时间:2014-03-09 20:06:34

标签: sql-server function transactions

我有疑问。我可以在SQL Server 2012中使用事务中的事务吗?因为现在我有错误:

Invalid use of a side-effecting operator 'BEGIN TRANSACTION' within a function.

1 个答案:

答案 0 :(得分:0)

如果要编写函数以更好地构造脚本,则可以将其称为“过程”而不是“函数”,然后将其传递一个或多个OUTPUT参数以接收计算结果。

“功能”不能有副作用,例如插入/更新/删除行或创建/更改/删除结构。

我和found the solution at the sqlservertutorial都遇到了同样的问题,我衷心推荐您阅读该书。

CREATE PROCEDURE uspFindProductByModel (
    @model_year SMALLINT,
    @product_count INT OUTPUT
) AS
BEGIN
    SELECT 
        product_name,
        list_price
    FROM
        production.products
    WHERE
        model_year = @model_year;

    SELECT @product_count = @@ROWCOUNT;
END;

调用过程并接收结果:

DECLARE @count INT;

EXEC uspFindProductByModel
    @model_year = 2018,
    @product_count = @count OUTPUT;

我不得不提到,此示例中的过程没有任何副作用,因为更改db中的数据,因此也可以将其构建为函数。 无论如何,一个过程似乎更通用,并且可以支持许多输出参数,而不仅仅是一个返回值。 是的,我知道,一个函数可能会返回一个聚合。

祝你好运