Sql server 使用sql在Verbal中设置一个值

Sql server 使用sql在Verbal中设置一个值,sql-server,new-operator,Sql Server,New Operator,我想用动词形式设置“不操作”值。这是我的选择查询 DECLARE @i nvarchar(Max); set @i = '619, 618, 620, 2162, 2173, 3613, 2090'; select * from tbl_PharmacypurDetail where ItmCode in (CAST(@i as bigint)) 结果 Msg 8114,第16级,第5状态,第2行 将数据类型nvarchar转换为bigint时出错 您可以使用拆分功能: select tp.

我想用动词形式设置“不操作”值。这是我的选择查询

DECLARE @i nvarchar(Max); set @i = '619, 618, 620, 2162, 2173, 3613, 2090';
select *  from tbl_PharmacypurDetail where ItmCode in (CAST(@i as bigint))
结果

Msg 8114,第16级,第5状态,第2行
将数据类型nvarchar转换为bigint时出错

您可以使用拆分功能:

select tp.*
from tbl_PharmacypurDetail tp cross apply
     dbo.splitfn(@i, ',') as t(val)
where t.val = tp.itemcode;
如果您使用的是
SQL Server 2016或更高版本
,则可以使用
STRING\u SPLIT

您可以使用拆分功能:

select tp.*
from tbl_PharmacypurDetail tp cross apply
     dbo.splitfn(@i, ',') as t(val)
where t.val = tp.itemcode;

如果您使用的是
SQL Server 2016或更高版本
,则可以使用
STRING\u SPLIT

如果您的服务器不支持
STRING\u SPLIT
,您可以使用类似的方法:

DECLARE @i nvarchar(Max);
SET @i = '619, 618, 620, 2162, 2173, 3613, 2090';

SELECT * 
FROM tbl_PharmacypurDetail 
WHERE CHARINDEX(',' + CONVERT(NVARCHAR(MAX), ItmCode) + ',', ',' + REPLACE(@i, ' ', '') + ',') > 0

如果您的服务器不支持
STRING\u SPLIT
,您可以使用类似的方法:

DECLARE @i nvarchar(Max);
SET @i = '619, 618, 620, 2162, 2173, 3613, 2090';

SELECT * 
FROM tbl_PharmacypurDetail 
WHERE CHARINDEX(',' + CONVERT(NVARCHAR(MAX), ItmCode) + ',', ',' + REPLACE(@i, ' ', '') + ',') > 0
可以使用根据指定的分隔符将字符串拆分为子字符串行

可以使用根据指定的分隔符将字符串拆分为子字符串行


错误告诉了你问题所在
'619、618、620、2162、2173、3613、2090'
不是一个
int
,而是一个由数字字符、空格和逗号组成的
varchar
。您使用的是什么版本的SQL Server?我使用的是SQL Server r2。我想在操作符帮助变量中使用这些值。“服务器r2”?您是指SQL Server 2008 R2(完全不受支持)?错误告诉您问题所在
'619、618、620、2162、2173、3613、2090'
不是一个
int
,而是一个由数字字符、空格和逗号组成的
varchar
。您使用的是什么版本的SQL Server?我使用的是SQL Server r2。我想在操作符帮助变量中使用这些值。“服务器r2”?你是说SQL Server 2008 R2(完全不受支持)?