急!!!求SQL大牛一个技术问题。

qq_42536413 2019-01-17 12:55:04
例如:原始效果,每个表里的字段名称都一样。有几千个表


想达到的效果。大批量插入红色圈起来的数据,每个表都需要插入。红色圈里的数据应该是2005年到2013年的。
...全文
209 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
秋天之落叶 2019-01-18
  • 打赏
  • 举报
回复
取出表 循环1
取出字段名 循环2
比较字段名的首字母是不是等于A
是,截掉A,修改表的字段名
不是,下一个
结束循环2
结束循环1
秋天之落叶 2019-01-18
  • 打赏
  • 举报
回复
随便找个你会用的语言,写一个循环读取表,取出字段名,用字符串函数copy(字段名,1,1)判断每一个字段的字段名的第一个字母是不是A,如果是,截掉A,剩余部分修改字段名。
另外,下面的问题和上面的问题,均可直接在语言中实现,不需要用excel表的。
qq_42536413 2019-01-18
  • 打赏
  • 举报
回复
十分感谢版主,还有各位朋友的帮忙。这个需求我用笨法解决了,用SQL实现难度太高了。。把目标表批量导出,在外面用EXECL合并处理.然后在用C++批量写入数据库了。。。不过现在又遇到一个问题还得麻烦大家一下。分不是很多。,大家多担待!。。 导入的表还是几千个,每个表列字段也是几千,字段名前面都有一个大写的A。有没有办法一次性。把所有表里的所有字段前面这个A去掉 想达到的效果
秋天之落叶 2019-01-18
  • 打赏
  • 举报
回复
随便找个你会用的语言,写一个循环读取表,判断一个规则,比如 表名 包含某些特殊字串,条件成立进行读取和插入。
qq_42536413 2019-01-17
  • 打赏
  • 举报
回复
补充一下,可以先把需要插入的数据批量导入SQL生产对应的表。。然后怎么把每个对应的表数据合并起来。。。
唐诗三百首 2019-01-17
  • 打赏
  • 举报
回复

declare @tablename0 nvarchar(200), -- 来源表表名
@tablename1 nvarchar(200), -- 目标表表名
@tsql nvarchar(max)

declare ap scroll cursor for
select name from sys.tables where [过滤条件] --> 加where条件查询出所有目标表

open ap
fetch first from ap into @tablename1
while(@@fetch_status<>-1)
begin
select @tablename0=[转换规则] --> 将目标表表名(@tablename1)按转换规则得到来源表表名

-- 动态产生插入数据的insert语句,然后执行.
select @tsql=N'insert into '+@tablename1+N'([字段列表]) '
+N'select [字段列表] from '+@tablename0
exec(@tsql)

fetch next from ap into @tablename1
end

close ap
deallocate ap
Hello World, 2019-01-17
  • 打赏
  • 举报
回复
游标或者在excel里拼好字符串(按照下面的格式拼)来执行,关键这些表有什么规律?比如tableooo如何对应tablexxx?
insert into tablexxx (aa,bb,cc) select aa,bb,cc from tableooo
唐诗三百首 2019-01-17
  • 打赏
  • 举报
回复
需提供原始表表名和目标表表名的对应关系, 或对应的规律, 才能写程序.
qq_42536413 2019-01-17
  • 打赏
  • 举报
回复
谢谢2楼版主回复。可能是我没描述清楚这个奇葩需求。。。例如现在数据库里有100个表,想要把另外100个表里的数据。一次性插入到对应的表里。。这200个表的字段是一样的。。插入后的效果就是上面图片那样
唐诗三百首 2019-01-17
  • 打赏
  • 举报
回复
写个SQL游标, 结合动态SQL完成.

declare @tablename nvarchar(200),@tsql nvarchar(max)

declare ap scroll cursor for
select name from sys.tables

open ap
fetch first from ap into @tablename
while(@@fetch_status<>-1)
begin
-- 动态产生插入数据的insert语句,然后执行.
select @tsql=N'insert into '+@tablename+N'([字段列表]) '
+N'[字段的值]'
exec(@tsql)

fetch next from ap into @tablename
end

close ap
deallocate ap

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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