Sql server sql server 2012函数中的事务

Sql server sql server 2012函数中的事务,sql-server,function,transactions,Sql Server,Function,Transactions,我有个问题。我可以在SQL Server 2012中使用函数中的事务吗?因为现在我有一个错误: Invalid use of a side-effecting operator 'BEGIN TRANSACTION' within a function. 如果编写函数是为了更好地构造脚本,则可以将其称为“过程”而不是“函数”,并向其传递一个或多个输出参数以接收计算结果 “函数”不能有副作用,如插入/更新/删除行或创建/更改/删除结构 我也有同样的问题,我衷心推荐你阅读 CREATE PROCE

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

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

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

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

我也有同样的问题,我衷心推荐你阅读

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;
我必须提到,本例中的过程没有任何副作用,因为它改变了数据库中的数据,所以它也可以作为函数构建。 无论如何,过程似乎更通用,并且可能支持多个输出参数,而不是只支持一个返回值。 是的,我知道,函数可能返回聚合


祝你好运,

你能告诉我们为什么你认为在函数中使用begin transaction是有意义的吗?因为我必须在函数中进行事务处理才能上学。我可以选择环境(oracle、ms sql、itd)。我知道它应该在存储过程中,但是,它可以在函数中使用?事务不能在SQL Server的函数中使用,如果它们可以在任何其他数据库的函数中使用,我会感到惊讶。您确定是在函数中而不是在存储过程中执行此操作的吗?不,在存储过程中,我已经执行了此操作。好的,谢谢你的帮助。问题已解决;)@marcin_波兰亲爱的marcin,阅读文档在某种程度上是至关重要的。在学校学习SQL我很惭愧,你从来没有考虑过真正学习你的主题。据我所知,由于函数的局限性,事务在任何sql变体/服务器的函数中都不可用。如果你的老师要求-他是应该被解雇的人(把他送到这里来读)。但你更可能把事情搞混了。