web-dev-qa-db-ja.com

sqlcmdがCSVに出力するときにnull列にリテラル 'NULL'を返す

Sqlcmd(SQL Server 2008 R2)を使用して簡単なクエリを実行し、データを.csvファイルに出力しています。 SQLファイルには、次のコードがあります。

USE [OSCAR_UK]
SELECT DISTINCT ISNULL(LTRIM(RTRIM(il.[LifeInsuredFirstName])),'') AS [First Name]
  ,ISNULL(LTRIM(RTRIM(il.[LifeInsuredSurname])),'') AS [Last Name]
  ,CONVERT(varchar(26),il.[DateOfBirth],23) AS [Date Of Birth]
  ,ISNULL(LTRIM(RTRIM(il.[Gender])),'') AS [Gender]
  ,ISNULL(LTRIM(RTRIM(il.[PostCode])),'') AS [Postcode]
  ,ISNULL(LTRIM(RTRIM(ce.[PolicyNumber])),'') AS [Policy Number]
FROM [dbo].[Insured_List] il
LEFT OUTER JOIN [dbo].[Cession] ce
ON il.[pk_Cession] = ce.[pk_Cession]

私の問題は、ISNULLを使用してその条件をトラップしているにもかかわらず、NULL値を含むフィールドが空の文字列ではなく文字列リテラル 'NULL'として.csvファイルに返されることです。

これまでの私の検索では、SQL Server 2005ですべてが正常に機能することを不満に思っている人のみが実際に見つかりました。誰かが私にとても親切な研究ソースを教えてくれるなら。

前もって感謝します。

編集:問題が発生するのは、出力がファイルにリダイレクトされる場合のみで、画面に表示するだけの場合は発生しません。事実の後で、私はある種のグローバル置換をしなければならないでしょう。それは苦痛ですが、それがそうであるならば、それはそれがそうである方法です。

2
Spratty

表示されている問題を再現できません。

私はSQL Server 2008 R2インスタンスを使用しており、次のテストコマンドを使用してsqlcmd.exe経由でそれに接続しています。

.\sqlcmd -S "My2008R2Instance" -E -d tempdb -Q "set nocount on; 
   create table #t (col1 varchar(10) null, col2 varchar(10) null);
   insert into #t(col1, col2) values (null, null);
   select coalesce(col1, '') as col1, coalesce(col2, '') as col2 
   from #t;" -o C:\temp\test.csv -s "," -h -1

出力は、2つの列の間にコンマを含む1行のファイルで構成されます。

          、 

ご覧のとおり、「NULL」値は返されません。これらは、COALESCE関数で必要とされる長さゼロの文字列に置き換えられました。

1
Max Vernon