where ステートメントをスキップして、数値の郵便番号用に 1 つの列を作成し、もう 1 つの列を作成します。このように:
SELECT [Fm].[Id], [Sdp].[FirstName], [Sdp].[LastName], [Sdp].[SSN], [Sdp].[StoreName], ( CASE WHEN ISNUMERIC([Sdp].[PostalCode])=1 THEN 0 ELSE NULL END ) AS NumericPostalCode, ( CASE WHEN ISNUMERIC([Sdp].[PostalCode])=0 THEN [Sdp].[PostalCode] ELSE NULL END ) AS PostalCode, [Fc].[Id], [Sdp].[Address] FROM [SRM].[SiteMembers].[DProfile] AS [Sdp] INNER JOIN [SRM].[SiteMembers].[Member] AS [Sm] ON [Sdp].[Member_Id] = [Sm].[Id] INNER JOIN [FRM].[Members].[Member] AS [Fm] ON [Sm].[UserId] = [Fm].[UserId] INNER JOIN [SRM].[General].[City] AS [Sc] ON [Sdp].[City_Id]=[Sc].[Id] INNER JOIN [FRM].[General].[City] AS [Fc] ON [Fc].[Title]=[Sc].[Title] COLLATE SQL_Latin1_General_CP1_CI_AS´
プレ>編集 1
これにより2列になることはわかっています。ただし、1 つの列にデータ型を含めることはできません。でも、こんなこともできると思います。
SELECT [Fm].[Id], [Sdp].[FirstName], [Sdp].[LastName], [Sdp].[SSN], [Sdp].[StoreName], ( CASE WHEN ISNUMERIC([Sdp].[PostalCode])=0 THEN [Sdp].[PostalCode] ELSE '0' END ) AS PostalCode, [Fc].[Id], [Sdp].[Address]
プレ>これは、数値が varchar として「0」であるため機能します。
編集 2
次のようにすることもできます:
SELECT CAST('asdasd' AS sql_variant) UNION ALL SELECT CAST(0 AS sql_variant)
プレ>しかし、これはこの問題の汚い解決策です。 sql_variant はデータベース オブジェクトです。したがって、私の結論は次のとおりです。異なるデータ型を使用する場合は、列に使用します。値が同じデータ型になる可能性がある場合は、同じ列を使用します。このような問題を解決するために sql_variant を使用しないでください。コードを維持するために高い代償を払うことになります。
この助けを願っています。