生成された SQL クエリを含む nvarchar 変数を返すストアド プロシージャと、FOR XML PATH を使用して XML を生成する 2 つ目のプロシージャを作成しました。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
'<' 付近の構文が正しくありません。
メッセージ 137、レベル 15、状態 1、行 4
スカラー変数「@xml」を宣言する必要があります。
メッセージ 137、レベル 15、状態 2、行 216
スカラー変数「@xml」を宣言する必要があります。
メッセージ 156、レベル 15、状態 1、行 217
キーワード「FOR」付近の構文が正しくありません。
メッセージ 137、レベル 15、状態 1、行 219
スカラー変数「@xml」を宣言する必要があります。
メッセージ 137、レベル 15、状態 2、行 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
The identifier that starts with CDATA[DECLARE @xml xml SELECT TOP 1 @xml = x FROM iksemel ORDER BY id INSERT INTO ARTYKUL_TEST(ID_ARTYKULU,ID_MAGAZYNU' is too long. Maximum length is 128 .
Msg 105、Level 15、State 1、Line 541
文字列 ')' の後の閉じていない引用符。
助けてください