SQL Server автоматически преобразует от из строк при сравнении.Простое решение - потребовать, чтобы все столбцы, которые могут использоваться в join
, были одного типа.В этом случае простое определение foreign key
помогло бы при настройке модели данных.
Вы можете устранить ошибку путем преобразования в строки:
SELECT u.[CreatedFromIp], c.[Token], c.[MaskedP]
FROM [dbo].[Users] u LEFT OUTER JOIN
[dbo].[Cards] c
ON CONVERT(VARCHAR(255), u.[Id]) = CONVERT(VARCHAR(255), c.[Id])
WHERE CreatedFromIp IS NOT NULL
ORDER BY Token;
Конечно, один изэти преобразования типов являются избыточными, поскольку поле уже является строкой.
Кроме того, вы можете преобразовать столбцы в целые числа - используя try_convert()
или try_cast()
:
SELECT u.[CreatedFromIp], c.[Token], c.[MaskedP]
FROM [dbo].[Users] u LEFT OUTER JOIN
[dbo].[Cards] c
ON TRY_CONVERT(int, u.[Id]) = TRY_CONVERT(int, c.[Id])
WHERE CreatedFromIp IS NOT NULL
ORDER BY Token;
Конечно, реальное решение состоит в том, чтобы исправить модель данных, чтобы столбцы, используемые в JOIN
s, имели одинаковый тип.