我有一个存储过程,将其开头的数据插入表变量, 之后我想删除记录,但我不能直接删除它们,所以我的解决方案是创建一个函数,从表变量<删除我的数据/ strong>并从SP调用它, 但问题是如何进行动态删除查询以及如何从SP访问表变量?
答案 0 :(得分:0)
如果您需要SP,请查看此解决方案。
在开始时我创建了一个用于存储所选id的表数据类型。
create type SelectedTable as table
(
SelectedId int
);
go
您可以使用与提及的表变量匹配的字段编辑此类型。
然后我创建一个以参数为表的存储过程并从某个表中删除一些数据 - 这是一个将表传递给SP的解决方案。
create procedure dbo.deleteSelectedRecords
@selectedIdTable SelectedTable readonly
as
set nocount on
delete from dbo.some_table_with_data_to_delete
where id_of_selected_record in (select SelectedId from @selectedIdTable)
go
在这个例子中,我将用选定的id样本准备表格。
declare @TempTable as SelectedTable;
insert into @TempTable (SelectedId) values (1), (2), (5), (12);
最后我们可以调用SP并用它删除所选元素。
exec dbo.deleteSelectedRecords @TempTable;
但我认为你不需要另一个SP或函数甚至动态SQL来做到这一点。您可以在SP中使用下面的查询,只需在您可以访问表变量
的SP中delete from dbo.some_table_with_data_to_delete
where id_of_selected_record in (select SelectedId from @TableVariable)