4
DECLARE @TablesList TABLE
(
TableName VARCHAR(500),
RefTable VARCHAR(500),
RefTableIDColumn VARCHAR(500)
)
DECLARE @Query AS VARCHAR(MAX)
SET @Query = 'DECLARE @badIds AS VARCHAR(500) DECLARE @TableXML AS XML'
SET @Query = @Query + ' SELECT @TableXML = xCol FROM (SELECT * FROM OPENROWSET (BULK ''\\10.0.0.60\Temp\path\DataItemTables.xml'', SINGLE_CLOB)AS xCol) AS R(xCol)'
SET @Query = @Query + ' INSERT INTO @TablesList SELECT ref.value(''tablename[1]'',''nvarchar(500)'') AS tablename,'
SET @Query = @Query + ' ref.value(''refTable[1]'',''nvarchar(500)'') AS refTable, ref.value(''refTableIDColumn[1]'',''nvarchar(500)'') AS refTableIDColumn FROM'
SET @Query = @Query + ' @TableXML.nodes(''//Table[@name="Description"]'') AS R(ref)'
SET @Query = @Query +'select * from @TablesList'
EXEC(@Query)
私は上記のスクリプトを実行しています。しかし、私は以下のようなエラーが発生していますSQLサーバーのXMLファイルからXMLデータを補間する際のエラー
私は間違っています。しかし、私は以下のような動的な形式でクエリを書くとき、それは正常に動作します。問題は、SPのすべての動的部分を削除したいということです。
DECLARE @Query AS VARCHAR(MAX)
SET @Query ='DECLARE @TablesList TABLE (TableName VARCHAR(500),RefTable VARCHAR(500),RefTableIDColumn VARCHAR(500))'
SET @Query = @Query + ' DECLARE @badIds AS VARCHAR(500) DECLARE @TableXML AS XML'
SET @Query = @Query + ' SELECT @TableXML = xCol FROM (SELECT * FROM OPENROWSET (BULK ''\\10.0.0.60\Temp\Path\DataItemTables.xml'', SINGLE_CLOB)AS xCol) AS R(xCol)'
SET @Query = @Query + ' INSERT INTO @TablesList SELECT ref.value(''tablename[1]'',''nvarchar(500)'') AS tablename,'
SET @Query = @Query + ' ref.value(''refTable[1]'',''nvarchar(500)'') AS refTable, ref.value(''refTableIDColumn[1]'',''nvarchar(500)'') AS refTableIDColumn FROM'
SET @Query = @Query + ' @TableXML.nodes(''//Table[@name="Description"]'') AS R(ref)'
SET @Query = @Query +'select * from @TablesList'
EXEC(@Query)
ありがとうございました。上記のクエリを動的ではなく静的にすることはできますか? – user2998990
もちろん、私は運動としてあなたにそれを残します。 –
@ user2998990動的SQLを使用する理由はありますか? 'EXEC(@Query)'を 'SELECT @ Query'に変更すると、クエリのテキストを大きな作業なしで得ることができます。出力のテキストの長さを8192(最大値)に設定することを忘れないでください。さもなければ、SSMSはあなたに全体を表示しません... – Shnugo