declare @column1name varchar(50)
declare @qry varchar(max)
declare @mail_subject varchar(50)
select @qry='SET NOCOUNT ON;print ''sep=;''; select brand_type '+
' ,shop_name,acc_area,pay_tx_trade_no,pos_trade_time,trade_type,amount,trade_fee
FROM ##report_temp'
select @mail_subject=@queryYM+'明細表'
exec msdb.dbo.sp_send_dbmail
@profile_name = 'XXXXXX_db',
@recipients = @mailto ,
@copy_recipients = 'XXXXX@8way.com.tw',
@query= @qry,
@attach_query_result_as_file = 1,
@query_result_width =32767,
@query_result_no_padding=1 ,
@query_attachment_filename = 'Report.xls',
@query_result_header = 1,
@subject = @mail_subject,
@query_result_separator = ';',
@ansi_attachment = 1 --msdb.dbo.sp_send_dbmail在SQL Server 2008R2預設不是ANSI輸出有在該程序調整
drop table ##report_temp
END
想請教各位,要執行預存程序後轉成csv檔,但因為表格有中文所以多加一個語法叫做 @ansi_attachment = 1 ,但現在執行預存程序後會跳錯誤,錯誤訊息如圖
請問該怎麼修正語法可以讓中文欄位與中文的值正常顯示呢?
上網查 = 1 是UTF-8 但又無法執行!
CREATE TABLE ##report_temp
(
[門店名稱] NVARCHAR(10)
剛剛欄位名稱中文命名
但是檔案打開來還是沒有顯示完整
CREATE TABLE ##report_temp
(
[門店名稱] NVARCHAR(10) ,
[shop_name] NVARCHAR(30),
[acc_area] NVARCHAR(30),
[pay_tx_trade_no] NVARCHAR(30),
[pos_trade_time] NVARCHAR(30),
[trade_type] NVARCHAR(5),
[amount] float,
[trade_fee] float
)
insert into ##report_temp
exec [XXXX].[dbo].[XXXXX] @queryYM
declare @column1name Nvarchar(50)
declare @qry Nvarchar(max)
declare @mail_subject Nvarchar(50)
select @qry='SET NOCOUNT ON;print ''sep=;''; select [門店名稱] '+
' ,shop_name,acc_area,pay_tx_trade_no,pos_trade_time,trade_type,amount,trade_fee
FROM ##report_temp'
select @mail_subject=@queryYM+N'明細表'
建議 :
1.下一道 SQL 產生中文欄位
declare @column1name varchar(50)
@column1name = N'門店名稱'+ N'店長'.....
2.資料的部分獨立下一條 SQL
GPT根據提供的程式碼和問題描述,可以嘗試進行以下修改以解決中文欄位和值無法正常顯示的問題。
將 @ansi_attachment 設為 0
因為您想要中文欄位和值正常顯示,所以我們需要將 @ansi_attachment 設為 0,表示使用Unicode編碼(UTF-16)來處理附件。這樣可以確保中文字符被正確地編碼和顯示。
修改程式碼如下:
@ansi_attachment = 0
修改 @qry 中的 print 'sep=;' 語句
您在 @qry 中使用了 print 'sep=;' 語句,這會導致生成的 CSV 檔案的第一行包含 'sep=;',這不是正確的 CSV 標頭。為了避免這個問題,我們可以刪除這個語句。
修改程式碼如下:
select @qry='SET NOCOUNT ON; select brand_type '+
' ,shop_name,acc_area,pay_tx_trade_no,pos_trade_time,trade_type,amount,trade_fee FROM ##report_temp'
確保郵件的主旨 @mail_subject 正確設定
您的程式碼中使用了 @mail_subject=@queryYM+'明細表' 來設定郵件的主旨,但是在程式碼中沒有看到 @queryYM 的定義。請確保這個變數被正確地定義並賦值。
修改程式碼如下:
declare @queryYM varchar(50)
select @queryYM = '報告日期' -- 修改為適當的值
select @mail_subject = @queryYM + '明細表'
請根據上述修改嘗試運行您的程式碼,這樣應該能夠正確地生成中文欄位和值的 CSV 檔案並傳送郵件。