2

SQL Server 2005 を使用しており、HTML 形式のデータベース メールを送信しています。必要な結果が得られていますが、テーブルを希望どおりにフォーマットするのに苦労しています。

テーブルの行に入力する 2 つの別個の SELECT ステートメントが実行されています。問題は、それらが互いに関連しているため、並べて表示したいのですが、一方が他方の上にしか表示されないことです。大きなテーブル内の 2 つのテーブルにそれらを配置しようとしましたが、移動しません。私は約 10 年間 HTML を使用していないので、おそらくスクリプト自体よりも HTML に問題があると思われます。

2 つの select ステートメントを含む @body セクションを次に示します。

    N'<table border="1" cellpadding="0" cellspacing="0"><font face="arial">' +
    N'<th>Store Number</th>' +
    N'<td>'+ CAST ( ( SELECT store_num
              FROM store_results 
              WHERE successful = 'N'
                OR successful IS NULL 
              ORDER BY store_num ASC FOR XML PATH('tr'), TYPE ) AS NVARCHAR(MAX) )+'</td>'+
    N'</td>' +
    N'<td><table border="1" cellpadding="0" cellspacing="0"><font face="arial">' +
    N'<th>Reason</th>' +
    N'<td>'+CAST ( ( SELECT 
                CASE successful
                WHEN 'N' THEN 'Failed'              
                    ELSE 'Did Not Run'
                END
            FROM store_results where successful = 'N' OR successful is null
            ORDER BY store_num ASC FOR XML PATH('tr'), TYPE ) AS NVARCHAR(MAX) )+'</td>'+
    N'</td>' +
    N'</table>
4

1 に答える 1

1

私はついにこれを理解しました。列を作成するには、最初にヘッダー TD を設定する必要があります。フォーマットを使用する代わりに、希望どおりに表示します。そのようです:

N'<table border="1" cellpadding="0" cellspacing="0"><font face="arial">' +
N'<tr><td>Store Number</td><td>Reason</td></tr>' +
N'<td>'+ CAST ( ( SELECT 
    td = store_num
    td = reason
        from store_results
        ORDER BY store_num ASC FOR XML PATH('tr'), TYPE ) AS NVARCHAR(MAX) ) +  
N'</table>

td/@attribute = case... にこだわりたい場合は、クエリの結果に基づいてセルを実際にフォーマットできます。HTML生成コードをよりシンプルに保つために、spの早い段階ですべての結果を一時テーブルに入れました。

于 2011-03-19T15:00:20.063 に答える