none
SQL Server2008とSQL Server2016の違いについて RRS feed

  • 質問

  • お世話になります。

    SQL Server2008とSQL Server2016で同じSQLを実行した際に結果が異なる事象があります。

    結果の違いは下記の通りで2008の場合は、暗黙的な型変換が実施されていように見受けられます。

    SQL Server2008からSQL Server2016にかけてCASE文の仕様が変わったのでしょうか。

    SQL Server2016でもSQL Server2008と同じように出力するための設定等がありましたらご教示ください。

    【対象SQL】

     SELECT 

      CASE WHEN a = '1' then CAST(’a’ as CAHR(5))

          WHEN a ='2' then 'b'

       END A 

     

    【2008での結果】

    A
    'a    '
    'b    '

    ※CASE内で出力される可能性のある型の中でCAHR型に自動的に変換されているように見える。

    【2016での結果】

    A
    'a    '
    'b'


    2019年10月10日 12:16

回答

すべての返信

  • SQL Serverのバージョンというよりも互換性レベルの問題かもしれません。SQL Server 2016のお使いの互換性レベルが、SQL Server 2008でお使いの互換性レベルと合っていなければ、一度合わせてみれば改善されるかもしれません。


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    • 回答としてマーク yumine 2019年10月15日 5:39
    2019年10月11日 2:04
  • 回答いただきありがとうございます。

    SQL Server2008とSQL Server2016の環境で互換性レベルを確認したところ、

    それぞれ異なる設定値となっていました。(2008が80、2016が100)

    提供いただいたリンク先に、SQL Server2016では互換性80はサポートされていないことが分かりましたので、

    SQLを修正することを検討いたします。

    以上です。


    2019年10月15日 5:44