数据库查询问题int型字段对应以Int型数值+','组成的nvarchar型字段

webclassparent(int型)和webclasssubord(nvarchar型)来表示父栏目和子栏目,客户的需求是要读出某个父类下面所有子栏目的内的新闻,我最初想到的是:select * from article where articleclass in(select webclasssubord from webclass where webclassid=15) 说明:webclasssubord是由子栏目id加“,”组成的一个nvarchar型的字符串。

    但是出错了,提示是:"将 nvarchar 值 '16,17,18,24,41' 转换为数据类型为 int 的列时发生语法错误"为什么呢?

    后来请教了老宋才发现,直接用in (select webclasssubord from webclass where webclassid=15)这个时候读出来的是一个整体的nvarchar,无法使用In来查询int型数字是否包含在这个nvarchar里面,但是如果把对应的这个字段读到一个变量里 然后,比较这个变量里是否articleclass这个int型字段的值,所以做了以下修改:

declare @t nvarchar(100)
select @t= (SELECT webclasssubord  FROM webclass  WHERE webclassid = 15)
select @t='SELECT * FROM article WHERE Articleclass IN ('+@t+')'
execute(@t)
go

测试通过

原文地址:https://www.cnblogs.com/biandande/p/939220.html