Sql 需要使用临时表中的数据对字符串进行多次更改
我有一个CSV样式的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
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权限是相当有限的。您需要创建该函数。请参阅提供的链接