我想创建一个插入记录并返回其主键的函数,以便我可以将该函数作为另一个查询的参数传递。例如,我试过这个:
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'。”
我希望能够使用这样的功能:
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.');
如果有的话,我怎样才能达到预期的效果?如果不可能,我能做些什么呢?
答案 0 :(得分:5)
无法使用用户定义的功能 修改基表信息。该 DML语句INSERT,UPDATE和 DELETE不能用于基表。
所以你不能在函数中执行INSERT。
文章解决方案:SQL Server Error Messages - Msg 443
由于在用户定义的函数中不允许使用INSERT命令,因此您必须使用存储过程来实现此目的。这是与上述函数相同的脚本,但使用存储过程:
答案 1 :(得分:0)
MS SQL中的函数不允许DML查询。您可以在存储过程中使用该查询,这应该有效。