【发布时间】:2014-11-09 14:03:23
【问题描述】:
我写了一个如下的存储过程
Create table #Temp(
TLOAID int,
TLOAName nvarchar(50)
);
-- drop table #Temp;
DECLARE @string VARCHAR(max) = 'Casualty, Insurance, Debit,';
-- SET @string = @LOAStringParam;
SELECT B.LOAId AS TLOAID,
B.LOAName TLOAName
INTO #temp
FROM (SELECT Rtrim(Ltrim(Split.a.value('.', 'VARCHAR(100)'))) AS Data
FROM (SELECT Cast ('<M>' + Replace(@string, ',', '</M><M>') + '</M>' AS XML) AS Data) AS A
CROSS APPLY Data.nodes ('/M') AS Split(a)) a
JOIN tbLOA B
ON a.data = B.LOAName;
If(exists(SELECT tbPLOA.LOAId
FROM tbPLOA
WHERE tbPLOA.LOAId NOT IN(SELECT #Temp.TLOAID from #Temp) AND PId= @PId))
BEGIN
....
....
END
...
现在它会抛出类似的错误消息
'a' 附近的语法不正确。
我无法追踪这个错误!!!请帮帮我!!!
【问题讨论】:
-
我认为您的错误来自:CROSS APPLY Data.nodes ('/M') AS Split(a)) a。我假设拆分是拆分字符串的自定义函数?也许尝试使用更有意义的完整别名。看起来您的“a”用于多种用途。
-
@RichardVivian 是对的
-
能否在代码中解释一下
-
这个具有相同别名的代码应该可以正常运行。在这里查看stackoverflow.com/questions/26816418/…
-
我不认为你可以使用两次相同的别名 a 和 A
标签: sql sql-server sql-server-2008