Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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 需要使用临时表中的数据对字符串进行多次更改_Sql_Csv_Sql Server 2012 - Fatal编程技术网

Sql 需要使用临时表中的数据对字符串进行多次更改

Sql 需要使用临时表中的数据对字符串进行多次更改,sql,csv,sql-server-2012,Sql,Csv,Sql Server 2012,我有一个CSV样式的varchar,它包含另一个表中记录的ID(外键)(该表对这个问题不重要)。请注意,此CSV始终具有前导和尾随逗号字符 Select ts_Associated_Requirements from usr_Change_Rqst: ,455,616,854,1093,1094,1095,1096,1097,1098,1123,1222, 我需要删除CSV中的ID以及为我创建的临时表中列出的ID: CREATE TABLE #TasksToReassign (ID IN

我有一个CSV样式的
varchar
,它包含另一个表中记录的ID(外键)(该表对这个问题不重要)。请注意,此CSV始终具有前导和尾随逗号字符

Select ts_Associated_Requirements 
from usr_Change_Rqst:


,455,616,854,1093,1094,1095,1096,1097,1098,1123,1222,
我需要删除CSV中的ID以及为我创建的临时表中列出的ID:

CREATE TABLE #TasksToReassign (ID INT NOT NULL);

INSERT INTO #TasksToReassign  ....blahblah... ;

SELECT * FROM #TasksToReassign ;
输出:

 ID         
 -----------
         666
         854
        1093
        1094
        1095
        1097
        1098
这是一个简化的例子。我知道,对于有限数量的if replacement,我可以嵌套
REPLACE()
语句,但当临时表包含50个或更多要删除的值,而CSV包含数百个值时,这会变得很麻烦

我没有数据库权限来创建函数,所以请考虑使用简单的select /Update。 原始字符串:

    ,455,616,854,1093,1094,1095,1096,1097,1098,1123,1222,
我想要什么

    ,455,616,1096,1122,1223,
注意:这种情况适用于商用现成软件产品。我不能重新设计他们的数据库或表


在Windows Server 2012 R2上使用SQL Server 2012。

您需要解析并拆分逗号上的字符串并返回单个ID。对照临时表检查并排除这些ID。再次形成CSV

由于您使用的是
SQL Server 2012
,因此无法使用
STRING\u SPLIT
。您可以使用任何CSV拆分器。这里我用的是杰夫·摩登的

示例查询

declare @ts_Associated_Requirements varchar(100),
        @new_list                   varchar(100)

select  @ts_Associated_Requirements  = ',455,616,854,1093,1094,1095,1096,1097,1098,1123,1222,'

CREATE TABLE #TasksToReassign ( ID int NOT NULL ) ;

insert into #TasksToReassign 
values (666), (854), (1093), (1094), (1095), (1097), (1098)

select  @new_list = isnull(@new_list + ',', '') + Item 
from    dbo.DelimitedSplit8K(@ts_Associated_Requirements, ',') a
where   not exists
        (
            select  *
            from    #TasksToReassign x
            where   x.ID = a.Item   -- DelimitedSplit8K returns 2 column ItemNumber & Item
         )
order by ItemNumber

select  @new_list

返回:无效的对象名称“dbo.DelimitedSplit8K”。如果这与我的DB权限有关,那么我的DB权限是相当有限的。您需要创建该函数。请参阅提供的链接