我有疑问。我可以在SQL Server 2012中使用事务中的事务吗?因为现在我有错误:
Invalid use of a side-effecting operator 'BEGIN TRANSACTION' within a function.
答案 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中的数据,因此也可以将其构建为函数。 无论如何,一个过程似乎更通用,并且可以支持许多输出参数,而不仅仅是一个返回值。 是的,我知道,一个函数可能会返回一个聚合。
祝你好运