web-dev-qa-db-ja.com

NULLを空の文字列に変換-文字列からuniqueidentifierに変換するときに変換に失敗しました

SQL Server 2005を使用して、以下のステートメントまたは出力をどのように取得するのですか?.

SELECT Id   'PatientId',
       ISNULL(ParentId,'')  'ParentId'
FROM Patients

ParenIdはuniqueidentifierを許可するNULLですが、クエリオプティマイザーは''の行に対してParentId = NULLuniqueidentifierに変換しようとするようですこれは、クエリランナーが私の顔に投げる正確なエラー情報です!

  • サーバーがParentId = NULLに対して空の文字列を返すようにする方法
33
Deeptechtons
SELECT Id   'PatientId',
       ISNULL(CONVERT(varchar(50),ParentId),'')  'ParentId'
FROM Patients

ISNULL は常に、最初の引数の型としてsameデータ型を持つ結果を返そうとします。 。そのため、結果を文字列(varchar)にする場合は、それが最初の引数の型であることを確認するのが最善です。


COALESCE は、allを考慮するため、通常、ISNULLよりも使用するのに適した関数です引数のデータ型で、適切な precedence ルールを適用して、最終的な結果のデータ型を決定します。残念ながら、この場合、uniqueidentifiervarcharよりも優先順位が高いため、それは役に立ちません。

(3つ以上の引数に拡張されるため、一般的にも好まれます)

63
Select ID, IsNull(Cast(ParentID as varchar(max)),'') from Patients

これは、フィールドParentIDがvarchar/nvarchar型ではないために必要です。これはトリックを行います:

Select ID, IsNull(ParentID,'') from Patients
8
Sudipto

出力が常に同じデータ型になるように、CASTParentIdとしてnvarcharする必要があります。

SELECT Id   'PatientId',
       ISNULL(CAST(ParentId as nvarchar(100)),'')  'ParentId'
FROM Patients
6
Curt