sql 触发器

xiaoliuvv 2018-05-03 05:42:21
当插入的时候触发
我要获取插入的一个字段,是字符串,代表了多个id
然后触发器执行更新另一个表所有包含这些id的,但是总提示
在将 varchar 值 '38,37,36,35,34,33,32,31,30,29' 转换成数据类型 smallint 时失败

declare @fid varchar(50) /** 劳模id **/
select @fid=tpjl_tpjl from inserted
update lm set lm.lm_ps =lm.lm_ps+1 where lm.lm_id in (@fid)
...全文
1483 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwfxgm 2018-05-09
  • 打赏
  • 举报
回复
引用 4 楼 xiaoliuvv 的回复:
这个做的是先进劳模的投票程序,因为是多选,然后一次性提交用户选了谁,我想着记录用户的选择,用一条记录就可以了,然后用触发器,将这些选择的id都增加1票,于是遇到这个问题了
你这样设计。肯定不规范的。还是规范的设计好。后续省力啊。
xiaoliuvv 2018-05-09
  • 打赏
  • 举报
回复
这个做的是先进劳模的投票程序,因为是多选,然后一次性提交用户选了谁,我想着记录用户的选择,用一条记录就可以了,然后用触发器,将这些选择的id都增加1票,于是遇到这个问题了
吉普赛的歌 版主 2018-05-03
  • 打赏
  • 举报
回复
引用 2 楼 xiaoliuvv 的回复:
多谢,这样效率不会很低把
如果数据量大, 效率低是肯定的。 因为按正规的数据库表设计, 不应该搞什么 id 聚合, 而是单独弄一个 id 表, 再将两者关联。 这样处理效率高, 只是处理稍复杂一些。 两种办法, 你自己权衡咯
xiaoliuvv 2018-05-03
  • 打赏
  • 举报
回复
多谢,这样效率不会很低把
唐诗三百首 2018-05-03
  • 打赏
  • 举报
回复

declare @fid varchar(50) /** 劳模id **/

select @fid=tpjl_tpjl from inserted

update lm 
 set lm.lm_ps =lm.lm_ps+1 
 where charindex(','+rtrim(lm.lm_id)+',', ','+@fid+',')>0

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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