SQL函数返回一个包含INSERT的值
问题描述:
我想创建一个插入记录并返回其主键的函数,以便我可以将该函数作为另一个查询的参数传递。例如,我尝试这样做:SQL函数返回一个包含INSERT的值
CREATE FUNCTION CreateEntity
(
@entityTypeId int,
@siteId int
)
RETURNS bigint
AS
BEGIN
DECLARE @entityId bigint;
INSERT INTO [ObjectSystem].[Entities] ([EntityTypeId], [SiteId], [Deleted])
VALUES (@entityTypeId, @siteId, 0);
SELECT @entityId = SCOPE_IDENTITY();
RETURN @entityId;
END
GO
但MSSMS凸显INSERT查询并说:“在一个函数中无效使用了副作用的运算符‘插入’的。”
我希望能够使用这样的功能,像这样:
INSERT INTO OtherTable (EntityId, Name, Description) VALUES
(CreateEntity(), 'Test', 'This is a test item.'),
(CreateEntity(), 'Test', 'This is a test item.'),
(CreateEntity(), 'Test', 'This is a test item.'),
(CreateEntity(), 'Test', 'This is a test item.'),
(CreateEntity(), 'Test', 'This is a test item.'),
(CreateEntity(), 'Test', 'This is a test item.');
我怎样才能达到预期的效果,如果在所有?如果不可能,我能做些什么呢?
答
用户定义函数不能用于 修改基表信息。 DOL语句INSERT,UPDATE和 DELETE不能在基表上使用。
所以你不能在一个函数中执行INSERT。
解决方案文章:SQL Server Error Messages - Msg 443
由于INSERT命令不能在用户定义的函数允许的,你必须使用一个存储过程来完成此任务。这里是与上述功能相同的脚本,但使用存储过程:
答
DML查询不允许在MS SQL中的函数中使用。您可以在存储过程中使用该查询,并且应该可以工作。