SQL Server“偷懒”也能更新数据表

问:请专家指教!问题是这样的:我这里有1000个数据表,每个表的结构一模一样(每个表里都有“qq,tj,yj,ej,sj,sij,wj,lj,zs,zjl”10个字段),只是表名不一样。还有一个“数据更新表jj(table_index,qq,tj,yj,ej,sj,sij,wj,lj,zs,zjl)”,除了table_index字段外,同样有“qq,tj,yj,ej,sj,sij,wj,lj,zs,zjl”10个字段,有1000行,该表的用途是用来更新(insert)前述1000个数据表的,即每一行数据更新一个表。但是如果手动更新很麻烦,而且“数据更新表”的内容经常变化,也就是说要经常更新前述的1000个数据表,我就想能否编写个程序,让数据自动进行更新,因此我先将这1000个表的表名放在“表table_index(序号,数据表名)”中,然后编写了如下函数(当中的返回值实际上没有用)。但是语法检查“ @table_name”处有错,不知如何进行更正,或者说这种方法是否可行?如果不可行,请专家能否给我指点一下有什么“偷懒”点的方法进行上述1000个数据表的更新?本人将万分感谢!

  use fff
go
create function data_insert1()
RETURNS int
Begin
 Declare @qq int(4)
 declare @table_index int(4),@tj int(4),@yj int(4),@ej int(4),@sj int(4),@sij bigint(8)
 declare @wj bigint(8),@lj bigint(8),@zs bigint(8),@zjl char(15),@table_name char(15)
 declare youbiao cursor for select * from jj for read only
 open youbiao
 fetch next from youbiao into @table_index,@qq,@tj,@yj,@ej,@sj,@sij,@wj,@lj,@zs,@zjl
 while @@fetch_status=0 /*loop rows in the cursor*/
 begin
  declare youbiao_temp cursor for
  select 数据表名 from table_index where 序号=@table_index
  open youbiao_temp
  fetch next from youbiao_temp into @table_name 
  insert @table_name(qq,tj,yj,ej,sj,sij,wj,lj,zs,zjl)
  values(@qihao,@tj,@yj,@ej,@sj,@sij,@wj,@lj,@zs,@zjl)
  deallocate youbiao_temp
 end
 deallocate youbiao
 RETURN @table_index
end
go

答:肯定的是,这种方法可行。所犯的错误是没有理解 字段名,表名,数据库名之类作为变量时,必须用动态SQL,使用动态sql语句就能解决该问题.

use fff
go
create function data_insert1()
RETURNS int
Begin
 Declare @qq int(4)
 declare @table_index int(4),@tj int(4),@yj int(4),@ej int(4),@sj int(4),@sij bigint(8)
 declare @wj bigint(8),@lj bigint(8),@zs bigint(8),@zjl char(15),@table_name char(15)
 declare youbiao cursor for select 数据库表名,qq,tj,yj,ej,sj,sij,wj,lj,zs,zjl from jj a,table_index b where a.table_index=b.序号 for read only
 open youbiao
 fetch next from youbiao into @table_name,@qq,@tj,@yj,@ej,@sj,@sij,@wj,@lj,@zs,@zjl
 while @@fetch_status=0 /*loop rows in the cursor*/
 begin
  declare @s Nvarchar(1000)
  set @s = 'insert ' + @table_name + '(qq,tj,yj,ej,sj,sij,wj,lj,zs,zjl)' values'+'('+@qq+','+@tj+','+@yj+','+@ej+','+@sj+','+@sij+','+@wj+','+@lj+','+@zs+','+@zjl+')'
  Exec(@s)      
  exec sp_executesql @s
  open youbiao
 fetch next from youbiao into @table_name,@qq,@tj,@yj,@ej,@sj,@sij,@wj,@lj,@zs,@zjl
 end
 deallocate youbiao
 RETURN 1
end
go

时间: 2024-08-02 12:33:25

SQL Server“偷懒”也能更新数据表的相关文章

SQL Server分布式分区视图分解数据表

分布式分区视图可以将来自一个或多个SQL Server数据库中的数据连接起来.当开发一个水平分区数据库环境时,你可以使用分布式分区视图将来自不同服务器的分区表连接起来,使得这些数据看起来像来自同一个服务器. 你可以设计这些视图,因此,如果你的潜在数据表结构设计合理的话,查询优化器就可以知道从那个数据表得到查询需要的数据,从而加速运行.一个设计合理的分布式分区视图还可以实现更新.插入和删除.我们将在本文的下一部分深入探讨它是如何实现这样操作的. 示例 本例中,我们假设SalesHistory表非常

asp.net excle表批量导入到sql server 2000的同时实现更新功能

问题描述 asp.net excle表批量导入到sql server 2000的同时实现更新功能 excle批量导入功能已经实现了,用的SqlBulkCopy. 但怎样能实现更新功能呢? 导入的数据表内容很多,都是上万条数据的,所以要保证效率! 有知道的大神,请给我详细代码,谢谢! 解决方案 我用的下面代码实现的,是在网上找的方法,主要思路是,两个表比较,删除相同数据,然后用SqlBulkCopy导入数据. 现在的问题是,如果excle表和sql server表的数据很多,执行起来会很慢,经常超

数据库-新手求教SQL server语句 求和,多个表之间的操作

问题描述 新手求教SQL server语句 求和,多个表之间的操作 SQL求和插入,求C表更新每个OrderID的SUM_Fee,SUM_Fee对应B表每个OrderId的总和(A表的B_ID对应B表的ID,B_ID记录单个Fee)? 解决方案 SQL Server 2005 用触发器跟踪表操作 解决方案二: update C set SUM_Fee=(select SUM(orderid) from B where B.orderid=C.orderid)没看懂A表,不是太明确的需求... 解

SQL server中多种关键字查询数据

问题描述 SQL server中多种关键字查询数据 比如学生有姓名,学号,班级等列,我可以通过学号查询,也可以通过姓名查询 解决方案 两个办法,一个是首先在代码中判断输入的是全数字还是中文,分别执行不同的查询.或者写在一起:select * from table where 姓名=输入 or 学号=输入 解决方案二: select * from 学生表 where name = '姓名' or No='学号' 解决方案三: 可以使用动态sql拼接比如定义一个@sqltext 根据不同的情况拼接s

Sql Server函数全解<三>数据类型转换函数和文本图像函数

原文:Sql Server函数全解<三>数据类型转换函数和文本图像函数 一:数据类型转换函数 在同时处理不同数据类型的值时,SQL Server一般会自动进行隐士类型转换.对于数据类型相近的值是有效的,比如int和float,但是对于其它数据类型,例如整型和字符类型,隐士转换就无法实现了,此时必须使用显示转换.为了实现这种显示转换,T-SQL提供了两个显示转换函数,分别是CAST和CONVERT函数. CAST(x AS type)和CONVERT(type,x)函数将一个类型的值转换为另一个

如何从SQL SERVER中恢复被删除的表?

问题描述 如何从SQL SERVER中恢复被删除的表?这表中的数据能不能一起恢复? 解决方案 恢复被删除的表可以使用SQL数据恢复软件log explorer for sql server来恢复,表中的数据可以一起恢复.具体的可以看一下这篇.http://www.wuguoqiang.com/j_note_detail.asp?id=24解决方案二:删表之前最后先备份下"create table temp as(select * from tableName)"

Excell导SQL Server 某列包含混合数据 导致非数字串为null

  [问题描述]     Excell文件导入SQL Server时,某列数据中即包含纯数字组合的串,也包含带有个别字母的串.导入数据库时,该列的所有非纯数字串为null.例如:     Excell文件:     Sid    Name    Code     1        Jerry       1001     2        Merry      CN01     3        Mark       1002     导入数据库表后:     1      Jerry    

SQL Server 2008 R2——使用数字辅助表(master..spt_values)实现用计数字段对记录进行重复显示

原文:SQL Server 2008 R2--使用数字辅助表(master..spt_values)实现用计数字段对记录进行重复显示 =================================版权声明================================= 版权声明:原创文章 谢绝转载  请通过右侧公告中的"联系邮箱(wlsandwho@foxmail.com)"联系我 勿用于学术性引用. 勿用于商业出版.商业印刷.商业引用以及其他商业用途.       本文不定期修

SQL SERVER Transactional Replication中添加新表如何不初始化整个快照

原文:SQL SERVER Transactional Replication中添加新表如何不初始化整个快照 在SQL SERVER的复制(Replication)中,有可能出现由于业务需求变更,需要新增一张表或一些表到已有的复制(发布订阅)当中,这种需求应该是很正常,也很常见的.但是在已有的复制(发布订阅)当中增加新表/文章,往往需要将整个快照重新初始化,这样做虽然简单,但是往往在实际应用中会出现一些问题,例如,发布订阅的表比较多,数据量比较大,那么重新初始化快照往往需要很长一段时间,影响系统