【发布时间】:2012-11-20 20:32:47
【问题描述】:
我有一个格式如下的表(我使用的是 MS SQL Server 2008):
car_id | trace
1 1300275738;57.72588;11.84981;0.00026388888888888886;1300275793;57.72596;11.8529;0.001055...
跟踪值是一个以分号作为分隔符的 csv 字符串。跟踪字符串中的值被分组为四和四,如下所示(除了没有换行符):
1300275738;57.72588;11.84981;0.00026388888888888886;
1300275793;57.72596;11.8529;0.0010555555555555555;
1300275785;57.72645;11.85242;0.007416666666666665;
1300275780;57.72645;11.85242;0.0010138888888888888;
我想要做的是在插入时创建一个触发器,该触发器根据四个一组中的第一个值对跟踪字符串进行排序。所以上面的结果会变成
1300275738;57.72588;11.84981;0.00026388888888888886;1300275780;57.72645;11.85242;0.0010138888888888888;1300275785;57.72645;11.85242;0.007416666666666665;1300275793;57.72596;11.8529;0.0010555555555555555;
我试图做的是将值拆分为临时表中的单独行,如下所示:
USE tempdb
GO
checkpoint
dbcc dropcleanbuffers
dbcc freeproccache
GO
--declare a variable and populate it with a comma separated string
DECLARE @SQLString VARCHAR(MAX)
SET @SQLString = (SELECT trace FROM mypev_trips.dbo.trips)
--append a comma to the string to get correct results with empty strings or strings with a single value (no commas)
SET @SQLString = @SQLString + ';';
DECLARE @X XML
SET @X = CAST('<A>' + REPLACE(@SQLString, ';', '</A><A>') + '</A>' AS XML)
SELECT t.value('.', 'nvarchar(20)')
FROM @x.nodes('/A') as x(t)
结果如下:
(No column name)
1300275738
57.72588
11.84981
0.000263888888888888
1300275780
57.72645
11.85242
0.001013888888888888
.
.
有谁知道如何将我的临时表转换回逗号分隔的字符串,并按每组四个中的第一个值排序?
【问题讨论】:
-
使用触发器来执行此操作是个坏主意。这也不是一个真正的问题:您要求 SO 为您编写触发器。
-
我想我可以问我如何从我的结果(临时表)返回到我想要的排序形式。有关触发器的信息只是为了提供一些上下文。我将编辑问题。
标签: sql sql-server sql-server-2008 triggers