我要查找一个表里某个字段是否存在值.这个字段是nvarchar格式.存储的值比如 1,234,2589 就是一个数字字符串,由,间隔.有一个表值函数可以分解这个字符串成表SELECT * FROM dbo.f_Split('1,234,2589',',') 会分解成col
----------
1
234
2589(3 行受影响)
SELECT * FROM InnerNotice
WHERE Status=1
AND
234 IN
(
SELECT * FROM dbo.f_Split(InnerNotice.ReciveManagerType,',')
)
上面会报错,
消息 102,级别 15,状态 1,第 5 行
'.' 附近有语法错误。
----------
1
234
2589(3 行受影响)
SELECT * FROM InnerNotice
WHERE Status=1
AND
234 IN
(
SELECT * FROM dbo.f_Split(InnerNotice.ReciveManagerType,',')
)
上面会报错,
消息 102,级别 15,状态 1,第 5 行
'.' 附近有语法错误。
解决方案 »
- 程序调用过程出错
- 高手,求救!!!!!!!!!!!!!
- 问个小问题,给10应该够了,大家不要笑哈
- 请问如何用sql语句实现sql中的一个表导出到access中去
- 运行SP,发生这样的错误:Maximum stored procedure,funtion,trigger,or view nesting levele execcded
- 访问拒绝的问题(MS Sql)
- 请问有没有将几个记录里的字符串串起来的sql语句?
- 关于大量关键字替换的问题
- 请问如何使用clientdataset向应用服务器插入一条记录
- 请问一句时间间隔的SQL语句
- 求大神帮忙啊!!如何把这2个查询出来的数据的字段,再进行统计。。
- sql2000 有数据库的mdf 和ldf 文件, 如何还原数据库?
WHERE Status=1
AND charindex(InnerNotice.ReciveManagerType,'234') > 0不使用拆分行可以吗?
WHERE Status=1
AND
234 IN
(
SELECT * FROM dbo.f_Split([InnerNotice.ReciveManagerType],',')
)
--
charindex 这个方法有误的.比如 12,34,56 如果查找1就会找到.但其实1是不符合条件的.只有12才符合
消息 102,级别 15,状态 1,第 5 行
'InnerNotice.ReciveManagerType' 附近有语法错误。
WHERE Status=1
AND
234 IN
(
SELECT * FROM dbo.f_Split(ReciveManagerType,',')
)这个呢?
--消息 321,级别 15,状态 1,第 5 行
"ReciveManagerType" 不是可识别的表提示选项。如果它要作为表值函数的参数,请确保您的数据库兼容模式设置为 90。
Cross apply (Select * from dbo.f_Split(a.InnerNotice.ReciveManagerType,',')) As b On a.234=b.col
WHERE a.Status=1
lz的问题是select 出来的结果,无法跟之前的select ...in(...)构成可解析的tsql语句。
可以使用动态拼接处理。如下DECLARE @sql NVARCHAR(2000)
SET @sql =
'SELECT * FROM InnerNotice WHERE Status=1 AND 234 IN ('+InnerNotice.ReciveManagerType+')'
EXEC(@sql)
SELECT * FROM InnerNotice
WHERE Status=1
AND charindex(',234,',ReciveManagerType) > 0
这样就能准确判断
WHERE Status=1
AND charindex(','+InnerNotice.ReciveManagerType+',',','+'234'+',') > 0