我正在使用子字符串来获取与某个费用代码匹配的所有电子邮件地址。由于我不提前知道最大长度是什么,我总是使用太大的int,我想知道它是否会影响查询的性能。
我需要的是获取具有最长EmployeeEmails数据的行的长度并使用它设置@MAXINT
DECLARE @MAXINT INT = 2147483646
SELECT
JOB.JOBNUMBER AS ExpenseCode,
substring(
(
Select ',' + LOWER(EMP.ELECTRONICMAILADDRESS) AS [text()]
From dbo.EMPLOYEE EMP
INNER JOIN ITEM on ITEM.ACCESSLEVELNAME = JOB.ACCESSLEVELNAME
Where LOWER(EMP.NAME2 + '.' + EMP.NAME3) Collate SQL_Latin1_General_CP1253_CI_AI = ITEM.NAMEOFUSER
AND GETDATE() < CASE WHEN EMP.DATEENDEMPLOYMENT = '' THEN '2099-01-01' ELSE EMP.DATEENDEMPLOYMENT END
ORDER BY EMP.ROWID
For XML PATH ('')
), 2, @MAXINT) EmployeeEmails
FROM JOB
ORDER BY JOB.JOBNUMBER
答案 0 :(得分:5)
请勿使用SUBSTRING
使用STUFF
。所以不是表达式:
SUBSTRING((SELECT...),2,2147483646)
执行:
STUFF((SELECT...),1,1,'')
STUFF
通常用于从字符串离子SQL Server中删除第一个字符。