sql 存储过程 实例

自己要统计34个表中的行数,

用到了动态表名字插入查询数据到新的表,记录下来。


-- =============================================
CREATE PROCEDURE [dbo].[mypro_getcount]
	 
AS
BEGIN

declare @i int 
set @i=1;
exec('delete pro_table')
while @i<35
begin
 --select max(id) from loop_2
--字符串的拼接要在exec 中
 exec('insert into pro_table select loopid, (max(id)-min(id))  
        from '+'loop_'+@i +' group by loopid having count(loopid) >1' )

 set @i=@i+1;
end 

end	

执行  exec mypro_getcount

1、字符串的拼接,要在exec 中。

2、插入到新表

      一:如果要插入目标表不存在:  select * into 目标表 from 表 where ...

要注意,在select后,要用as 指定名字

 exec(' select loopid as id, (max(id)-min(id)) as count   into pro_table4  from '+'loop_'+@i +' group by loopid having count(loopid) >1' )-

否则报错:消息 1038,级别 15,状态 5,第 1 行
  缺少对象或列名,或者对象或列名为空。对于 SELECT INTO 语句,请确保每列均具有名称。对于其他语句,请查找空的别  名。不允许使用定义为 "" 或 [] 的别名。请将别名更改为有效名称。

      二:如果要插入目标表已经存在:insert into 目的表 select * from 表 where 条件

     三:如果是跨数据库操作的话: 怎么把A数据库的atable表所查询的东西,全部插入到B 数据库的btable表中

select * into B.btable from A.atable where ...

    四,只插入一部分 ,如果表已经存在

insert  into pro_table  select max(id) from loop_1----报错:消息 213,级别 16,状态 1,第 8 行    列名或所提供值的数目与表定义不匹配。

正确的: insert  into pro_table(id)  select max(id) from loop_1  --指明插入那一列

如果表不存在,直接用select * into 目标表 from 表 where ..., 和插入全部是一样的,因为表就不存在。

猜你喜欢

转载自blog.csdn.net/u014710355/article/details/81436425