Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 拆分SQL server 2008并删除_Sql Server - Fatal编程技术网

Sql server 拆分SQL server 2008并删除

Sql server 拆分SQL server 2008并删除,sql-server,Sql Server,我找不到如何在SQL中使用split函数的结果。它返回一个表,我不知道如何使用“foreach”这样的函数来选择每个返回数据 查看拆分函数: ALTER FUNCTION [dbo].[Split] (@separator char(1), @value varchar(512)) RETURNS table AS RETURN ( WITH Pieces(pn, start, stop) AS ( SELECT 1, 1, CHARINDEX(@separator, @va

我找不到如何在SQL中使用split函数的结果。它返回一个表,我不知道如何使用“foreach”这样的函数来选择每个返回数据

查看拆分函数:

ALTER FUNCTION [dbo].[Split] (@separator char(1), @value varchar(512))
RETURNS table
AS
RETURN (
    WITH Pieces(pn, start, stop) AS (
      SELECT 1, 1, CHARINDEX(@separator, @value)
      UNION ALL
      SELECT pn + 1, stop + 1, CHARINDEX(@separator, @value, stop + 1)
      FROM Pieces
      WHERE stop > 0
    )
    SELECT pn AS Id,
      SUBSTRING(@value, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS Data
    FROM Pieces
  )
它返回以下内容:

@separator = ','
@value = '13,14,15'

Id Data
1  13
2  14
3  15
然后我想做这样一件事:

    DELETE FROM myTable
    WHERE  OneColumnInMyTable = @OneColumnInMyTable AND @ImportantValue = @Data
@数据对应于分割返回的每个值数据

目的是:

    foreach(Data in ReturnOfMySplitFunction)
    {
            DELETE FROM myTable
            WHERE  OneColumnInMyTable = @OneColumnInMyTable AND @ImportantValue = Data
    }
你有什么办法吗?使用sql server时是否可能?
谢谢

您可以使用拆分功能执行类似操作

DELETE
FROM myTable
WHERE OneColumnInMyTable = @OneColumnInMyTable
    AND @ImportantValue IN (
        SELECT Data
        FROM dbo.Split(',', @Data)
        )

在这里,我假设您的
@Data
包含如下值-
@Data='11、12、14、15'
请尝试以下脚本:

Delete  A 
FROM MYTABLE A
JOIN DBO.Split(@separator, @value) B ON B.DATA=@Data AND @ImportantValue = B.DATA
Where A.OneColumnInMyTable = @OneColumnInMyTable

如果有人想做同样的事情,我会把我的代码:

DECLARE @categories varchar(512),
        @GroupingId int,
        @Separator char

SET @Separator = ','
SET @categories = '12,24,33'
SET @GroupingId = '69241'

DELETE FROM RefAssoThematic
WHERE GroupingId = @GroupingId 
AND ThematicId IN (SELECT Data FROM
dbo.split(@Separator,@Categories))