我有此表结构和一些示例数据。我想通过参数返回多个ID的数据。我已经声明了一个参数字符串,现在我想将其与列进行比较,但是由于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
答案 0 :(得分:1)
最简单的解决方案是使用动态SQL
DECLARE @sql VARCHAR(1000) = 'SELECT * FROM EMPLOYEE WHERE ID IN (' + @StrID + ')';
EXEC(@sql);
答案 1 :(得分:1)
对于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,','))
请参阅此工作fiddle
答案 2 :(得分:1)
SELECT * FROM EMPLOYEE
WHERE @StrID+',' LIKE '%'+cast(ID as varchar(20))+'%,'
相当差的性能,因为它需要进行表扫描,但足够安全。
不过,通常,您的ID列表应该是一个表变量,您可以使用JOIN
或IN
做适当的操作
答案 3 :(得分:1)
创建用户定义的表类型,并将其作为参数传递。
tickers
答案 4 :(得分:0)
您可以使用Cast
中的SQL-Server
将其转换为适当的数据类型。来源Here
WHERE CAST(ID AS VARCHAR(20)) = @StrID
或者::您可以使用CONVERT
函数。
WHERE CONVERT(VARCHAR(20), ID) = @StrID