SQL Server 2005を使用して、以下のステートメントまたは出力をどのように取得するのですか?.
SELECT Id 'PatientId',
ISNULL(ParentId,'') 'ParentId'
FROM Patients
ParenIdはuniqueidentifier
を許可するNULL
ですが、クエリオプティマイザーは''
の行に対してParentId = NULL
をuniqueidentifier
に変換しようとするようですこれは、クエリランナーが私の顔に投げる正確なエラー情報です!
ParentId = NULL
に対して空の文字列を返すようにする方法SELECT Id 'PatientId',
ISNULL(CONVERT(varchar(50),ParentId),'') 'ParentId'
FROM Patients
ISNULL
は常に、最初の引数の型としてsameデータ型を持つ結果を返そうとします。 。そのため、結果を文字列(varchar
)にする場合は、それが最初の引数の型であることを確認するのが最善です。
COALESCE
は、allを考慮するため、通常、ISNULL
よりも使用するのに適した関数です引数のデータ型で、適切な precedence ルールを適用して、最終的な結果のデータ型を決定します。残念ながら、この場合、uniqueidentifier
はvarchar
よりも優先順位が高いため、それは役に立ちません。
(3つ以上の引数に拡張されるため、一般的にも好まれます)
Select ID, IsNull(Cast(ParentID as varchar(max)),'') from Patients
これは、フィールドParentIDがvarchar/nvarchar型ではないために必要です。これはトリックを行います:
Select ID, IsNull(ParentID,'') from Patients
出力が常に同じデータ型になるように、CAST
をParentId
としてnvarchar
する必要があります。
SELECT Id 'PatientId',
ISNULL(CAST(ParentId as nvarchar(100)),'') 'ParentId'
FROM Patients