我编写了一个存储过程,它返回包含一些生成的 SQL 查询的 nvarchar 变量,以及第二个过程,它使用 FOR XML PATH 生成 XML。我想修改生成 XML 的过程,并将生成的查询的内容从第一个过程添加到生成的 XML 中。
我生成 XML 的过程的一部分:
SELECT @SQLStr = 'SELECT';
DECLARE @tmp varchar(100), @tmpkod varchar(max);
DECLARE c CURSOR LOCAL READ_ONLY FOR
SELECT tableName, tableCode FROM @TableNames
OPEN c
FETCH NEXT FROM c INTO @tmp, @tmpkod;
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @i = @i - 1;
SELECT @SQLStr = @SQLStr + '(SELECT TOP 10 * FROM ' + @tmp + ' FOR XML PATH(''row''), TYPE) AS ' + @tmp + ',
'
EXEC GenerujSelectazXML @tmp, @tmpcode output;
SELECT @SQLStr = @SQLStr + '(SELECT ' + @tmpCode + ' FOR XML PATH (''row''), TYPE) AS ' + @tmp + '_TEST'
SELECT @tmpcode
IF (@i <> 0) SELECT @SQLStr = @SQLStr + ',
'
ELSE SELECT @SQLStr = @SQLStr + '
'
FETCH NEXT FROM c INTO @tmp, @tmpkod;
END
CLOSE c; DEALLOCATE c;
SELECT @SQLStr = @SQLStr + 'FOR XML PATH(''''), ROOT(''root'')';
EXEC (@SQLStr)
我不能简单地将查询的内容放入 XML,因为它包含一些特殊字符,如“<”、“>”,并且它们正在引入/结束 xml 标记。所以我认为将查询命令放入 XML 注释将解决我的问题。
我试过这个:
SELECT @SQLStr = '<!--' + @tmpCode + '-->';
它没有帮助,我得到了错误:
消息 102,级别 15,状态 1,第 3 行
'<' 附近的语法不正确。
Msg 137, Level 15, State 1, Line 4
必须声明标量变量“@xml”。
Msg 137, Level 15, State 2, Line 216
必须声明标量变量“@xml”。
消息 156,级别 15,状态 1,第 217 行
关键字“FOR”附近的语法不正确。
Msg 137, Level 15, State 1, Line 219
必须声明标量变量“@xml”。
Msg 137, Level 15, State 2, Line 416
必须声明标量变量“@xml”。
消息 156,级别 15,状态 1,第 417 行
关键字“FOR”附近的语法不正确。
消息 137,级别 15,状态 1,
消息 137,级别 15,状态 2,行 540
必须声明标量变量“@xml”。
我也试过这个:
SELECT @SQLStr = '<![CDATA[' + @tmpCode + N']]>';
它也没有帮助。
我收到的错误消息:
消息 102,级别 15,状态 1,第 3 行
'<' 附近的语法不正确。
Msg 103, Level 15, State 4, Line 3
以 CDATA[DECLARE @xml xml SELECT TOP 1 @xml = x FROM iksemel ORDER BY id INSERT INTO ARTYKUL_TEST(ID_ARTYKULU,ID_MAGAZYNU' 开头的标识符太长。最大长度为 128 .
Msg 105, Level 15, State 1, Line 541
字符串')'后面的非闭合引号。
请帮忙