使用CTE连接SQL Server中的值
我一直在尝试连接特定行的值。假设我有一个问题:使用CTE连接SQL Server中的值,sql,sql-server-2012,concatenation,Sql,Sql Server 2012,Concatenation,我一直在尝试连接特定行的值。假设我有一个问题: SELECT tblContacts_2.contactid, (COALESCE (tblSites_1.sitenm, '') + COALESCE (' / ' + tblSites_1.sitenmalt, '') + ' ' + COALESCE (tblSites_1.addr1, '') + ' ' + COALESCE (tblSites_1.zipcodeid, '') )
SELECT
tblContacts_2.contactid,
(COALESCE (tblSites_1.sitenm, '')
+ COALESCE (' / ' + tblSites_1.sitenmalt, '')
+ ' ' + COALESCE (tblSites_1.addr1, '') + ' '
+ COALESCE (tblSites_1.zipcodeid, '') ) AS SiteNameAddr,
tblSites_1.siteid
FROM
dbo.tblcontacts AS tblContacts_2
INNER JOIN
dbo.tjncsitecontacts AS tjncSiteContacts_1 ON tblContacts_2.contactid = tjncSiteContacts_1.contactid
INNER JOIN
dbo.tblsites AS tblSites_1 ON tblSites_1.siteid = tjncSiteContacts_1.siteid
此操作的输出为
ContactID SiteNameAddr SiteID
--------------------------------------------------------------
329 TWIN PARKS SOUTHWEST / TWIN PARKS SOUTH... 1
1788 TWIN PARKS SOUTHWEST / TWIN PARKS S.... 1
我想要的是,这种格式的输出,其中一个联系人id的sitenameaddrs与它关联的站点id计数连接起来,如下所示:
ContactID SiteNameAddr CountSite
-----------------------------------------------------------------------
321 RIVERSIDE PARK / 3333 BROADWAY 10035, URBAN... 8
322 WESTVIEW 625 MAIN ST 10044 1
问题是,执行此操作时以下代码失败-
SELECT
tblContacts_2.contactid,
dbo.Removelastchar(dbo.Strconcat(COALESCE (tblSites_1.sitenm, '')
+ COALESCE (' / ' +
tblSites_1.sitenmalt, '')
+ ' ' + COALESCE (tblSites_1.addr1, '')
+ ' '
+ COALESCE (tblSites_1.zipcodeid, '') +
', '))
AS SiteNameAddr,
Count(tblSites_1.siteid) AS CountSite
FROM
dbo.tblcontacts AS tblContacts_2
INNER JOIN
dbo.tjncsitecontacts AS tjncSiteContacts_1 ON tblContacts_2.contactid = tjncSiteContacts_1.contactid
INNER JOIN
dbo.tblsites AS tblSites_1 ON tblSites_1.siteid = tjncSiteContacts_1.siteid
GROUP BY
tblContacts_2.contactid
错误:
在执行用户定义的过程中发生.NET Framework错误
常规或聚合“strconcat”:System.Data.SqlServer.TruncationException:正在尝试转换返回值 将大小为8086字节的值或输出参数设置为具有 8000字节的较小大小限制 这是因为其中一个联系人ID有92个与之关联的站点,并且连接的字符串变得太大。另外,
dbo.Removelastchar
和dbo.Strconcat
是标量函数,因此它们只能返回nvarchar
,因此不能在其中使用ntext
。数据类型的类型转换也不起作用
请让我知道有什么替代方案。连接的字符串由Access中的VBA代码拾取您不能使用最多可容纳10亿个字符的
nvarchar(max)
吗?这还不够吗?@marc_s我读到在Dr.Evil.t-SQL函数的声音中CONCAT应该能够处理nvarchar(max)值,如果它不能自动返回nvarchar(max),将其中一个输入转换为nvarchar(max)以强制返回值你不能使用容纳10亿字符的nvarchar(max)
?这还不够吗?@marc_s我在Dr.Evil.t-SQL函数的声音中读到,如果CONCAT不能自动返回nvarchar(max),它应该能够处理nvarchar(max)值,将其中一个输入转换为nvarchar(max)以强制返回值