У меня есть две таблицы

CREATE TABLE LOGIN 
(
    [ID] INT NOT NULL IDENTITY(1,),
    PASSWORD VARCHAR(30) NOT NULL,

    CONSTRAINT [PK] PRIMARY KEY ([ID] ASC)
)
CREATE TABLE HASH 
(
    PSWDHASH VAR(100) NOT NULL
)

Здесь мы уже видим проблему: LOGIN имеет два столбца, а HASH — только один, а также тот факт, что столбец ID в LOGIN является INT. и PSWDHASH в HASH является varchar.

Мне нужно выполнить внедрение UNION SELECT внутри этого запроса.

SELECT * 
FROM login 
WHERE passwd = '$input';
SELECT * 
FROM login 
WHERE passwd = '' 

UNION 

SELECT PSWDHASH, NULL AS col2 
FROM HASH -- ';

Это приводит к ошибке

Ошибка преобразования при преобразовании значения varchar «b202c5234b» в тип данных int.

Как я могу обойти это? Самый простой способ — преобразовать ID в таблице LOGIN как varchar, но SELECT * предотвращает это. Я не могу использовать varchar в качестве идентификатора. Могу ли я что-нибудь сделать с ORDER BY? Могу ли я начать с столбца 2 в логине и столбца 1 в HASH?

0
corkeygo 16 Сен 2023 в 20:46

1 ответ

Вы можете жестко закодировать первый столбец, который создает ошибку. Попытался ли ты

ВЫБЕРИТЕ 1 как столбец 1, PSWDHASH (в этом случае первый столбец будет int)

Вместо того

ВЫБЕРИТЕ PSWDHASH, значение null в качестве столбца 2?

0
jakbar 16 Сен 2023 в 20:56