从函数中删除表变量中的数据

时间:2015-08-31 06:18:48

标签: sql function tsql dynamic-sql

我有一个存储过程,将其开头的数据插入表变量, 之后我想删除记录,但我不能直接删除它们,所以我的解决方案是创建一个函数,从表变量<删除我的数据/ strong>并从SP调用它, 但问题是如何进行动态删除查询以及如何从SP访问表变量?

1 个答案:

答案 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)