sql server 2012中的事务功能



我有问题。我可以在SQL Server 2012中使用事务功能吗?因为现在我有了错误:

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

如果您正在编写该函数以更好地构建脚本,则可以将其称为" procedure ";而不是"函数",并向其传递一个或多个OUTPUT参数以接收计算结果。

"function"不能有副作用,如插入/更新/删除行或创建/修改/删除结构。

我遇到了同样的问题,并在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;

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

好运,

最新更新