函数返回的结果表,怎么写入另一个表?

small_tu 2013-10-21 05:15:43
1,'1.bmp','a.bmp'
2,'2-1.rle','b.rle-1000.rle'
2,'2-2.rle','b.rle-700.rle'
3,'3.zip','c.zip'

一个函数getTestData()返回上面的结果表。
想把这些数据写入另个表A中,A中有4个字段,一个固定值,另外对应上面的逗号分隔的3个属性,该怎么写?
...全文
287 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2013-10-22
  • 打赏
  • 举报
回复
如果不从前端输入时就处理这种思想来着手,即使改写函数也还是要写很多拼接、拆分语句,并且扩展性很低
發糞塗牆 2013-10-22
  • 打赏
  • 举报
回复
引用 29 楼 small_tu 的回复:
[quote=引用 28 楼 jvbss 的回复:] 建议修改函数,要不查询起来很麻烦。良好的设计会为后面省很多事。
麻烦给个建议,怎么修改?[/quote]说白了就是能通过函数直接获取表,你也看到我写出来那个拼接多麻烦,多几个列就写死人了
small_tu 2013-10-22
  • 打赏
  • 举报
回复
引用 28 楼 jvbss 的回复:
建议修改函数,要不查询起来很麻烦。良好的设计会为后面省很多事。
麻烦给个建议,怎么修改?
潇洒王子 2013-10-21
  • 打赏
  • 举报
回复
建议修改函数,要不查询起来很麻烦。良好的设计会为后面省很多事。
LongRui888 2013-10-21
  • 打赏
  • 举报
回复
引用 17 楼 small_tu 的回复:
[quote=引用 11 楼 fredrickhu 的回复:] [quote=引用 9 楼 small_tu 的回复:] [quote=引用 7 楼 fredrickhu 的回复:] 把这个得到的结果值分解了就可以了嘛
insert into a(对应的3个值)
select parsename(replace(gettestdata,',','.'),3),
       parsename(replace(gettestdata,',','.'),2),
       parsename(replace(gettestdata,',','.'),1)
思路是挺好的,但是 【1,'1.bmp','a.bmp'】 这个里面本身就带着【.】呢,所以parsename是不是不行?[/quote] 哦 没注意 可以先把存在的.换成其他字符 截取以后再REPLACE回来。[/quote] 我一开始也是这么想的,但总希望能找到更好的“捷径”。[/quote] 我也是这么想的,总觉得有没有什么更加方便的办法来解析这个字符串,分拆为多个字段的值。 但仔细想想,再怎么想,还是只有这个办法,sql server没有提供给我们更好的办法。
發糞塗牆 2013-10-21
  • 打赏
  • 举报
回复
前端我不熟,但是传进数据库时,最理想的应该是用比如表变量等方式存放的一个二维数据表,直接insert即可,不用再按符号拆分甚至拆分多次,就好比excel直接导入。如果你还不会这些技术,先凑合着你这个吧,然后边用边学,我是不会怎么实现了。只是以前公司用过,我知道有这种方案而已,连源代码都没见过,目的其实就是一个,尽可能少得进行各种转换
small_tu 2013-10-21
  • 打赏
  • 举报
回复
引用 24 楼 DBA_Huangzj 的回复:
最好的方法当然就是传入的时候已经是一个“表”的形式,这样连拆分都省了,不过这个要在前端做
什么叫传入的时候已经是一个“表”的形式,表的形式是什么形式啊? 再次谢谢耐心的版主大人!!
發糞塗牆 2013-10-21
  • 打赏
  • 举报
回复
最好的方法当然就是传入的时候已经是一个“表”的形式,这样连拆分都省了,不过这个要在前端做
發糞塗牆 2013-10-21
  • 打赏
  • 举报
回复
插入之后马上转换,就成了关系表,直接查询方便很多,用的时候再拆,你要在每个用到的语句中都写拆分,不累死你啊
small_tu 2013-10-21
  • 打赏
  • 举报
回复
引用 21 楼 DBA_Huangzj 的回复:
你这样传也行,只是传进去之后应该尽快拆分好,不要用的时候才拆分
也行 就是说还有别的方法了? 为什么要尽快拆分好呢?先拆分和用的时候再拆分,有什么区别?
發糞塗牆 2013-10-21
  • 打赏
  • 举报
回复
你这样传也行,只是传进去之后应该尽快拆分好,不要用的时候才拆分
small_tu 2013-10-21
  • 打赏
  • 举报
回复
引用 18 楼 DBA_Huangzj 的回复:
最好的办法是改函数,这是设计错误
那个函数是从另一个字符串里截取出来的,本来的文字是 1,'1.bmp','a.bmp';2,'2-1.rle','b.rle-1000.rle';2,'2-2.rle','b.rle-700.rle',3,'3.zip','c.zip' 先用一个函数分割了 分号 部分,得到表。然后在让写入数据库。 不知道这种二维的数据,往数据库写的时候,要怎么传参数才好呢?
small_tu 2013-10-21
  • 打赏
  • 举报
回复
真心感谢两位版主!!


發糞塗牆 2013-10-21
  • 打赏
  • 举报
回复
最好的办法是改函数,这是设计错误
small_tu 2013-10-21
  • 打赏
  • 举报
回复
引用 11 楼 fredrickhu 的回复:
[quote=引用 9 楼 small_tu 的回复:] [quote=引用 7 楼 fredrickhu 的回复:] 把这个得到的结果值分解了就可以了嘛
insert into a(对应的3个值)
select parsename(replace(gettestdata,',','.'),3),
       parsename(replace(gettestdata,',','.'),2),
       parsename(replace(gettestdata,',','.'),1)
思路是挺好的,但是 【1,'1.bmp','a.bmp'】 这个里面本身就带着【.】呢,所以parsename是不是不行?[/quote] 哦 没注意 可以先把存在的.换成其他字符 截取以后再REPLACE回来。[/quote] 我一开始也是这么想的,但总希望能找到更好的“捷径”。
發糞塗牆 2013-10-21
  • 打赏
  • 举报
回复
引用 15 楼 fredrickhu 的回复:
[quote=引用 13 楼 DBA_Huangzj 的回复:] 还好3个列,要是列多就痛苦了
3个列必须可以 [/quote]去删帖吧。有广告贴
--小F-- 2013-10-21
  • 打赏
  • 举报
回复
引用 13 楼 DBA_Huangzj 的回复:
还好3个列,要是列多就痛苦了
3个列必须可以
--小F-- 2013-10-21
  • 打赏
  • 举报
回复

DECLARE @a VARCHAR(128)
SET @a= '1, 1.bmp , a.bmp '
select 
   REPLACE(parsename(REPLACE(REPLACE(@a,'.','-'),',','.'),3),'-','.'),
   REPLACE(parsename(REPLACE(REPLACE(@a,'.','-'),',','.'),2),'-','.'),
   REPLACE(parsename(REPLACE(REPLACE(@a,'.','-'),',','.'),1),'-','.')


/*1 1.bmp a.bmp */
發糞塗牆 2013-10-21
  • 打赏
  • 举报
回复
还好3个列,要是列多就痛苦了
發糞塗牆 2013-10-21
  • 打赏
  • 举报
回复
引用 9 楼 small_tu 的回复:
[quote=引用 7 楼 fredrickhu 的回复:] 把这个得到的结果值分解了就可以了嘛
insert into a(对应的3个值)
select parsename(replace(gettestdata,',','.'),3),
       parsename(replace(gettestdata,',','.'),2),
       parsename(replace(gettestdata,',','.'),1)
思路是挺好的,但是 【1,'1.bmp','a.bmp'】 这个里面本身就带着【.】呢,所以parsename是不是不行?[/quote]我一开始也想用F版主的方法,也的确发现1.bmp里面有.,所以才拼接
加载更多回复(11)

22,209

社区成员

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

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