从带有条件的表变量中删除

时间:2020-06-09 10:42:09

标签: sql-server tsql

我正在根据以下情况从表变量中删除数据。

DELETE FROM @SampleTable WHERE Fname IN (@Fname)

在@Fname中,我有类似'abc','def','ghi'的值。

但是delete语句不会删除数据。 如果在此条件下通过SELECT语句,它将被删除。

3 个答案:

答案 0 :(得分:2)

您可以将STRING_SPLIT()REPLACE()用作

declare @data table (name varchar(45));

insert @data values
('abc'),('def'),('ghi'),('jkl');

select * from @data;

declare @var varchar(100) = '''abc'',''def'',''ghi''';

delete from @data 
where name in(
              select value 
              from string_split(replace(@var, '''', ''), ',')
             );

select * from @data;

Online Demo

答案 1 :(得分:0)

我的事,你可以尝试这样的事情。

DECLARE @Query NVARCHAR(MAX)
SET @Query = 'DELETE FROM '+@SampleTable+' WHERE Fname IN ('+@Fname+')'
EXEC SP_EXECUTESQL @Query

答案 2 :(得分:0)

DECLARE  @SampleTable TABLE (Fname VARCHAR(MAX))
DECLARE @Fname VARCHAR(MAX) ='abc,ghi'
INSERT INTO @SampleTable(Fname)VALUES('abc'),('bb'),('ghi')

DELETE FROM @SampleTable WHERE Fname IN ( SELECT value from  STRING_SPLIT(@Fname,','));
SELECT * FROM @SampleTable

GO
| Fname |
| :---- |
| bb    |

db <>提琴here