ハッキングの少ないものを見つけました。唯一の問題は、 <td />
が作成されることです <td></td>
の代わりに 値が null の場合。電子メールが一部の古い Outlook クライアントに送信されると、レイアウトの問題が発生します。
declare @table varchar(max) = '(select 1 a, ''one'' b union all select 2, ''two'') t ' declare @sql varchar(max) = ' declare @xml xml = ( select * from ' + @table + ' for xml path(''tr''), root(''table'') ); select @xml' declare @tmp table (x xml) insert into @tmp exec(@sql) declare @x xml = (select x from @tmp) select @x.query('<body> <table> <tr> {for $c in /table/tr[1]/* return element th { local-name($c) } } </tr> { for $r in /table/* return element tr { for $c in $r/* return element td { data($c) } } } </table> </body>')
プレ>