2016-11-03 11 views
2

バックグラウンド情報:SQL Serverでquotenameを正しく実装するにはどうすればよいですか?

私はSSRSレポートを作成するストアドプロシージャを持っています。 SSRSレポートは実行され、CSVとしてエクスポートされます。その後、テキストファイルとして開かれ、3者ベンダのアプリケーションを実行します。

テキストブックの出力は次のようになります。

lid, status, i_flag,Count, pDate, iDate 
    62558633,"Text Value","08/16",11,"08/16","08/16" 
    78013526,"Text Value","",,"08/16""08/16" 

私の結果は次のようになります。

lid, status, i_flag,Count,pDate,iDate 
    19007442,"'Dir,MgmtII'",'',2,'','02/16' 
    17343623,'Text','',0,'11/15','02/16' 

今、私が使用しているコードは次のとおりです。

SELECT 
    quotename(isnull(i_flag,''''), '''') as i_flag, 
    isnull(lid, 0) as lid, 
    quotename(isnull(status,''''), '''') as status, 
    isnull(Count, 0) as Count, 
    quotename(isnull(p_Date,''''), '''') as p_Date, 
    quotename(isnull(i_Date,''''), '''') as i_Date 
FROM 
    #Table 

私はこれをどのように修正することができますかに関する任意のアイデア。これでちょっと困惑しました。ありがとう。

+3

あなたはQUOTENAMEのことを混乱させるかもしれないと思います。 https://msdn.microsoft.com/en-us/library/ms176114.aspx識別子を正しく構成するために使用されます。 –

+0

私はそのリンクを見ました。次のコードで手続きを書く前に、私はそれをテストしました。 Declare @text varchar(10)= 'Name' SELECT QUOTENAME(@Text、 '"")申し訳ありませんが、SQLスニペットを追加する方法がわかりません。しかし、そのようなものは私が何をしたのかを成し遂げます。私は私のクエリから返された行の周りに二重引用符を追加しようとしています。行がnullの場合でも。 – user6780741

+0

「行が空白の場合でも」という意味ではありませんか。 NULL行などはありません。私はあなたが出力として望むもののフォーマットを理解していません。私は空の文字列でNULLを処理したい。そのためには、4ではなく2つの一重引用符を使用する必要があります。 –

答えて

3

私は(私は非常に可能性はないよこれは)正しくあなたの質問を理解していた場合、私はあなたがしたいと思う:

SELECT 
    QUOTENAME(ISNULL(i_flag,''), '"') AS i_flag, 
    ISNULL(lid, 0) AS lid, 
    QUOTENAME(ISNULL([status],''), '"') AS [status], 
    ISNULL([Count], 0) AS [Count], 
    QUOTENAME(ISNULL(p_Date,''), '"') AS p_Date, 
    QUOTENAME(ISNULL(i_Date,''), '"') AS i_Date 
FROM 
    #Table 

あなたは、二重にラッピングをご希望の分野でいくつかの値を持っているようですねCSVにエクスポートする目的で引用符"を追加し、場合によってはこれらのフィールドの値がNULLになることがあります。

上記の私の提案は、最初にISNULLを使用してNULL値を空の文字列に置き換え、次にQUOTENAMEを使用して二重引用符で囲みます。

あなたの投稿コードへの重要な相違点は次のとおりです。

  • ISNULLを使用する場合は、私が代わりに文字列内の''''(2つの連続する単一引用符を表す単一引用符文字を含む文字列の空の文字列''でNULLを置き換えます
  • QUOTENAMEを使用して二重引用符で値をラップすると、二重引用符が''''の文字列ではなく、二重引用符'"'を含む文字列を第2パラメータに指定します。

私はあなたを助け願っています - あなたはまだ問題を抱えている場合、人々はさらにあなたを助けることができるので、おそらくあなたは、あなたの#Table一時テーブルやクエリから期待している出力からいくつかのサンプル行を提供することができます。余談として

は、それが列名または別名としてstatusまたはcountのようなSQLの予約語を使用することをお勧めではありませんが、あなたがしなければならない場合、私はSSMSで、特に(読みやすくするために(すなわち[status])括弧で囲んお勧めしますまたはSQLシンタックハイライトやカラーコード付きのIDE)を使用しています。

+1

コードと説明をありがとう! – user6780741

+0

ようこそ[user6780741](http://stackoverflow.com/users/6780741/user6780741)、私はちょうどここに貢献し始めているので、これがあなたにとって有益だと聞いてうれしいです。 – 3N1GM4

関連する問題