【发布时间】:2021-11-30 04:55:57
【问题描述】:
我有一个表 ProcessQueueLog,其中包含一个分隔字段值,我需要将其拆分并连接到另一个表。我有一份工作声明,但似乎相当缓慢。有人可以建议更好的方法吗?
fn_SplitString 是由一位早已离开的开发人员在内部编写的。它返回 part1 和 part2 并且是任何拆分字符串函数的典型。
SELECT pql.*, cl.ShortNote
FROM Automation.ProcessQueueLog pql
INNER JOIN dbo.CLog cl
ON cl.Conversation_ID = CAST((SELECT Part1 FROM dbo.fn_SplitString (pql.QueuedRecordId, '-')) AS INT)
AND cl.Memo_ID = CAST((SELECT Part2 FROM dbo.fn_SplitString (pql.QueuedRecordId, '-')) AS INT);
【问题讨论】:
-
最好不要在数据库中存储连字符分隔的数据。我不确定如何改进。
-
如果你有拥抱数据,最好创建另一个字段并将记录保存在不带-(连字符)的新字段中。
-
假设您的函数返回多列,在 CROSS APPLY 中运行一次并在结果上执行 JOIN
-
什么版本的 SQL Server?
fn_SplitString是多语句表值函数吗?你能分享一下吗?可能它可以被改进或只是消除(拆分固定数量的子字符串没有多大价值,比如 2)。
标签: sql sql-server tsql