У меня есть запрос:Изменение типа данных столбца изменяет поведение запроса
SELECT [Theme].[PK_Theme], [Theme].[Name], [ThemeType].[Type]
FROM [Theme]
LEFT OUTER JOIN [ThemeType]
ON [Theme].[ThemeTypeId] = [ThemeType].[PK_ThemeType]
JOIN [ProductTheme] ON [ProductTheme].[ThemeId]=[Theme].[PK_Theme]
WHERE ProductTheme.ProductID LIKE '%'
AND ProductTheme.ThemeId = Theme.PK_Theme
AND COALESCE([THEME].[THEMETYPEID], 'null') LIKE '%'
GROUP BY [Theme].[Name], [ThemeType].[Type], [Theme].[PK_Theme]
ORDER BY CASE WHEN [ThemeType].[Type] IS NULL THEN 0 ELSE 1 END, [Theme].[Name]
Причина, по которой LIKE
ы есть происходит потому, что на самом деле '%'
параметризованных с помощью управления asp.net сервера.
Результаты Этот запрос в следующем:
Вы не можете увидеть все возвращаемые данные, но [Theme].[Name]
в алфавитном порядке в течение двух сегментов, 1, где [ThemeType].[Type]
является NULL
тогда, когда это не является нулевым. [Theme].[PK_Theme]
является основным ключом, связанным с кодом [Theme].[Name]
.
Способ сопоставления таблиц состоит в том, что тема имеет столбец с именем ThemeTypeId
, который является внешним ключом первичного ключа в таблице ThemeType
.
Теперь вот моя проблема, в настоящее время ThemeTypeId
имеет VARCHAR(50)
тип данных, мне нужно это INT
. Я вижу, что вопрос:
COALESCE([THEME].[THEMETYPEID], 'null')
Это приводит к следующей ошибке:
Конверсия удалось при преобразовании значения 'NULL'
varchar
типу int
данных.
Однако, если я не изменить null
к NULL
ничего не возвращается, если я могу изменить его на 0 только NULL's are returned. I need both
NULL` и не Null возвращается, как это было ранее достигнуто выше. Как мне это сделать?
Вы все еще ставите 'как '%'' после объединения, даже если это int? –
в настоящее время, да ... это неверно?Как бы вы вернули все значения в случае с ints –
Я придумаю возможный ответ, но, не зная вашего управления сервером, я сомневаюсь, что я получу его на 100% в первый раз; не стесняйтесь делать предложения по улучшению. –