关于自定义函数使用列参数的问题(高手请进)

mishq 2007-03-02 03:03:47
我有一个表 table1(产品) 其中有一个列 color , 由于颜色有多种可能出现 如红+黑+白 这样的情况。 标准颜色的组合中间用+间隔。

另外有一个表table2 保存有标准的颜色,只有一列 Standcolor 保存有所有的标准颜色。

我现在想找出所有的包含有红色的产品 ,不能使用like '%红%' 这种情况,因为我不希望出现粉红等的颜色。


所以我建一个函数,先把颜色根据标准分开如
F_split(@s varchar(100))
return table (color varchar(10))
........


问题是我使用的时候不知道怎样写这条语句

如: select * from table1 where exists (select * from F_split(table1.color) where color ='红' )

这种语句都出错,不知应该怎么写或者有更好的方法。






...全文
270 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenwenya 2007-03-21
  • 打赏
  • 举报
回复
用短信猫做短信平台,比较稳定,不受网络安全影响,响应及时,适合一些重要的安全性高的业务需求,但是发送速度有限制,一般是800条/小时
sp短信通道发送速度快,但是由于接入的开发商很多,在服务器不多的情况下,必然会排队,有时繁忙时提交一条短信,第二天才能收到,而且网络不正常时,也会影响使用
建议一些管理软件用短信猫做短信平台
1.方寸GSM-Modem 短信平台

GSM-Modem 短信平台,无需联网,只需一台电脑,一个短信猫(或手机),一个短信开发接口,就可轻松建立短信服务器,可实现短信收发,短信互动等功能,一台电脑可以连接多个短信猫硬件,从而提高吞吐量。

2.方寸短信数据库接口(手机短信接口,短信二次开发控件)

通过本数据库接口,能使你现有的系统(如OA、CRM、ERP等系统)轻松实现无线办公功能,无论你用的是哪种开发语言(VB\VC\VFP\asp\jsp\java\pb\delphi...),只要你的系统能读写数据库即可对接!你仅需要在指定的表中添加记录,本接口程序就自动进行发送短信了,收到的短信会自动保存到数据库里,所以,您不需要了解任何有关数据通信方面的知识,就可实现手机短信的收发等功能!
电话:0755-25996144
联系人:陈先生
网址:http://www.fcwww.com
qq:393376247
mishq 2007-03-02
  • 打赏
  • 举报
回复
我还想问一下,这种返回表的函数,要用列名作为参数,不知道如何实现?
paoluo 2007-03-02
  • 打赏
  • 举报
回复
多種顏色也沒有問題的。
eg:

Select * From table1
Where CharIndex(N'+红+', '+' + color + '+') > 0
And CharIndex(N'+黑+', '+' + color + '+') > 0

mishq 2007-03-02
  • 打赏
  • 举报
回复
非常感谢 paoluo(一天到晚游泳的鱼) 这种方法确实可以实现。
只是我如果有多种颜色的时候
我还想问一下,这种返回表的函数,要用列名作为参数,不知道如何实现?
jacobsan 2007-03-02
  • 打赏
  • 举报
回复
函数的问题?贴出来看看?
paoluo 2007-03-02
  • 打赏
  • 举报
回复
Create Table table1
(color Nvarchar(10))
Insert table1 Select N'红+黑+白'
Union All Select N'粉红+黑'
Union All Select N'粉红+白'
Union All Select N'红+白'
GO
--方法一:
Select * From table1 Where CharIndex(N'+红+', '+' + color + '+') > 0
--方法二:
Select * From table1 Where '+' + color + '+' Like N'%+红+%'
GO
Drop Table table1
--Result
/*
color
红+黑+白
红+白
*/
paoluo 2007-03-02
  • 打赏
  • 举报
回复
沒有必要使用那個函數,可以直接用一句SQL來實現。

--方法一:
Select * From table1 Where CharIndex(N'+红+', '+' + color + '+') > 0
--方法二:
Select * From table1 Where '+' + color + '+' Like N'%+红+%'
mishq 2007-03-02
  • 打赏
  • 举报
回复
select * from table1 t where exists (select * from F_split(t.color) where color ='红' )
错误提示:

服务器: 消息 170,级别 15,状态 1,行 2
第 2 行: '.' 附近有语法错误。

select * from table1 t where exists (select * from F_split(color) where color ='红' )

服务器: 消息 155,级别 15,状态 1,行 2
'color' 不是可以识别的 OPTIMIZER LOCK HINTS 选项。

mishq 2007-03-02
  • 打赏
  • 举报
回复
select * from table1 t where exists (select * from F_split(t.color) where color ='红' )
错误提示:

服务器: 消息 170,级别 15,状态 1,行 2
第 2 行: '.' 附近有语法错误。

select * from table1 t where exists (select * from F_split(color) where color ='红' )

服务器: 消息 155,级别 15,状态 1,行 2
'cz' 不是可以识别的 OPTIMIZER LOCK HINTS 选项。
rookie_one 2007-03-02
  • 打赏
  • 举报
回复
同意ls~
jacobsan 2007-03-02
  • 打赏
  • 举报
回复
select * from table1 t where exists (select * from F_split(t.color) where color ='红' )

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧