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