Как сравнить строковую переменную с целым числом - PullRequest
1 голос
/ 12 июня 2019

У меня есть эта структура таблицы и некоторые примеры данных. Я хочу вернуть данные для нескольких идентификаторов через параметр. Я объявил строку параметров, и теперь я хочу сравнить ее со столбцом, но это не разрешено, поскольку ID является целым числом. Кто-нибудь может мне здесь помочь?

CREATE TABLE EMPLOYEE
(
    ID INT,
    EMPLOYEE_NAME VARCHAR(50)
);

INSERT INTO EMPLOYEE VALUES (1, 'Isaac Frempong');
INSERT INTO EMPLOYEE VALUES (2, 'Eric Ortizz');

DECLARE @StrID VARCHAR(20) = '1, 2'
SELECT * FROM EMPLOYEE
WHERE ID = @StrID

Ответы [ 5 ]

1 голос
/ 12 июня 2019

Создайте пользовательский тип таблицы и передайте его в качестве параметра.

CREATE TYPE [UDT_INTIDS] AS TABLE(
    [ID] [int] NOT NULL
)
GO

-- create a table value
DECLARE @IDs [UDT_INTIDS];
INSERT @IDs VALUES (1),(2);

-- search using table value. 
SELECT e.* 
FROM EMPLOYEE e
WHERE e.ID IN (SELECT p.ID FROM @IDs p);
-- or
SELECT e.* 
FROM EMPLOYEE e
JOIN @IDs p ON e.ID = p.ID;

Подробнее см. https://docs.microsoft.com/en-us/sql/relational-databases/tables/use-table-valued-parameters-database-engine?view=sql-server-2017.

1 голос
/ 12 июня 2019
SELECT * FROM EMPLOYEE
    WHERE @StrID+',' LIKE '%'+cast(ID as varchar(20))+'%,' 

Довольно плохая производительность, так как нужно будет сканировать таблицу, но достаточно безопасно.

Как правило, ваш список идентификаторов должен быть табличной переменной, которую вы можете сделать JOIN или IN с помощью

1 голос
/ 12 июня 2019

Самое простое решение - использовать динамический SQL

DECLARE @sql VARCHAR(1000) = 'SELECT * FROM EMPLOYEE WHERE ID IN (' + @StrID + ')';
EXEC(@sql);
1 голос
/ 12 июня 2019

Для SQL Server 2017+ вы можете использовать STRING_SPLIT табличную функцию, которая разбивает строку на строки подстрок

CREATE TABLE EMPLOYEE
(
ID INT,
EMPLOYEE_NAME VARCHAR(50)
);

INSERT INTO EMPLOYEE VALUES (1, 'Isaac Frempong');
INSERT INTO EMPLOYEE VALUES (2, 'Eric Ortizz');

DECLARE @StrID VARCHAR(20) = '1, 2'
SELECT * FROM EMPLOYEE
WHERE ID IN (SELECT value FROM STRING_SPLIT (@StrID,','))

Ссылайтесь на это скрипка

0 голосов
/ 12 июня 2019

Вы можете использовать Cast в SQL-Server, чтобы привести его к соответствующему типу данных.Источник Здесь

WHERE CAST(ID AS VARCHAR(20)) = @StrID

В качестве альтернативы: Вы можете использовать функцию CONVERT.

WHERE CONVERT(VARCHAR(20), ID) = @StrID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...