Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 在CTE中使用标量变量时出现“必须声明标量变量@…”错误_Sql Server 2008_Split_Common Table Expression_Table Variable - Fatal编程技术网

Sql server 2008 在CTE中使用标量变量时出现“必须声明标量变量@…”错误

Sql server 2008 在CTE中使用标量变量时出现“必须声明标量变量@…”错误,sql-server-2008,split,common-table-expression,table-variable,Sql Server 2008,Split,Common Table Expression,Table Variable,我将三列拆分为多个地址,每列都有多个由、、分隔的值,。我已经写了下面的代码,但它抛出了我的错误: 必须声明标量变量'@tbladdress' 我确实在处理“@tbladdress”甚至temp表的所有内容,但只要我执行整个代码,就会出现错误 DECLARE @tblAddresses TABLE ([EBN] INT, [Address (as text)] VARCHAR(4000), [Address (main)] VARCHAR(4000), [Side Address] VARCHA

我将三列拆分为多个地址,每列都有多个由、、分隔的值,。我已经写了下面的代码,但它抛出了我的错误:

必须声明标量变量'@tbladdress'

我确实在处理“@tbladdress”甚至temp表的所有内容,但只要我执行整个代码,就会出现错误

DECLARE @tblAddresses TABLE
 ([EBN] INT, [Address (as text)] VARCHAR(4000), [Address (main)] VARCHAR(4000), [Side Address] VARCHAR(4000));

INSERT INTO @tblAddresses
        SELECT [EBN], [Address (as text)], [Address (main)],  [Side Address] FROM  [dbo].[ImportDestination]
    ---SELECT * INTO #ttAddresses FROM @tblAddresses -- I was trying with temp tbl as well changing @tblAddresses to #ttAddresseses in the CTE FROM clause column, but did not help 

;WITH AddressesCTE 
AS 
 ( 
 SELECT *
        ,CAST('<x>' + REPLACE(@tblAddresses,',','</x><x>') + '</x>' AS XML) AS AsXmlAddress

 FROM @tblAddresses
 )
 SELECT [EBN]
      ,LTRIM(RTRIM(AsXmlAddress.value('/x[1]','nvarchar(max)'))) AS [AddressText1]
      ,LTRIM(RTRIM(AsXmlAddress.value('/x[2]','nvarchar(max)'))) AS [AddressText2]
      ,LTRIM(RTRIM(AsXmlAddress.value('/x[3]','nvarchar(max)'))) AS [AddressText3]
      ,LTRIM(RTRIM(AsXmlAddress.value('/x[4]','nvarchar(max)'))) AS [AddressText4]
      ,LTRIM(RTRIM(AsXmlAddress.value('/x[5]','nvarchar(max)'))) AS [AddressText5]
      ,LTRIM(RTRIM(AsXmlAddress.value('/x[1]','nvarchar(max)'))) AS [AddressText6]
      ,LTRIM(RTRIM(AsXmlAddress.value('/x[7]','nvarchar(max)'))) AS [AddressMain1]
      ,LTRIM(RTRIM(AsXmlAddress.value('/x[8]','nvarchar(max)'))) AS [AddressMain2]
      ,LTRIM(RTRIM(AsXmlAddress.value('/x[9]','nvarchar(max)'))) AS [AddressMain3]
      ,LTRIM(RTRIM(AsXmlAddress.value('/x[10]','nvarchar(max)'))) AS [AddressMain4]
      ,LTRIM(RTRIM(AsXmlAddress.value('/x[11]','nvarchar(max)'))) AS [AddressMain5]
      ,LTRIM(RTRIM(AsXmlAddress.value('/x[12]','nvarchar(max)'))) AS [AddressMain6]
      ,LTRIM(RTRIM(AsXmlAddress.value('/x[13]','nvarchar(max)'))) AS [AddressMain7]
      ,LTRIM(RTRIM(AsXmlAddress.value('/x[14]','nvarchar(max)'))) AS [AddressSide1]
      ,LTRIM(RTRIM(AsXmlAddress.value('/x[15]','nvarchar(max)'))) AS [AddressSide2]
      ,LTRIM(RTRIM(AsXmlAddress.value('/x[16]','nvarchar(max)'))) AS [AddressSide3]
      ,LTRIM(RTRIM(AsXmlAddress.value('/x[17]','nvarchar(max)'))) AS [AddressSide4]
      ,LTRIM(RTRIM(AsXmlAddress.value('/x[18]','nvarchar(max)'))) AS [AddressSide5]
      ,LTRIM(RTRIM(AsXmlAddress.value('/x[19]','nvarchar(max)'))) AS [AddressSide6]
      ,LTRIM(RTRIM(AsXmlAddress.value('/x[20]','nvarchar(max)'))) AS [AddressSide7]
 FROM AddressesCTE

什么REPLACE@tblAddresses“,”应该做什么?在一列中拆分以逗号分隔的地址是@tbladdires a column?它是一个表变量。这篇文章可能对上面代码的XML部分有所帮助。请返回您提供的示例,并与您的代码进行比较。特别是更换零件。你应该看到差异,这正是你的问题。什么REPLACE@tblAddresses“,”应该做什么?在一列中拆分以逗号分隔的地址是@tbladdires a column?它是一个表变量。这篇文章可能对上面代码的XML部分有所帮助。请返回您提供的示例,并与您的代码进行比较。特别是更换零件。你应该看到差异,这正是你的问题所在。