帮忙解释句sql语句

来源:百度知道 编辑:UC知道 时间:2024/05/25 17:12:53
create table tz2008_1_1(id int,name varchar(50))
insert into tz2008_1_1 select 1,'a'
create table tz2008_1_2(id int,name varchar(50))
insert into tz2008_1_2 select 2,'b'
create table tz2008_1_3(id int,name varchar(50))
insert into tz2008_1_3 select 3,'c'

//解释下面的
declare @sql varchar(8000)
select @sql=isnull(@sql+' union all ','')+' select * from ['+name+']'
from sysobjects where xtype='u' and name like 'tz2008%'
exec(@sql)
能详细点吗?
比如先执行那个 select 和 那个from结合 sql变量的值 第一个select是查询还是赋值

在最后加一句
select @sql

看它的返回值就好理解了:

select * from [tz2008_1_1] union all select * from [tz2008_1_2] union all select * from [tz2008_1_3]

它的意思就是查询sysobjects表,条件是当表类型xtype=u并且name是以tz2008开头的,但这里仅赋值,把那些表的查询语句赋给@sql,当最后EXEC那里才是返回这个查询到底的值是什么。

select *from sysobjects where xtype='u'
代表查询当前数据库中的用户表有哪些,如果把'u'改为's' 就是查询当前数据库中的系统表有哪些,like关键字就是模糊查询,比如查询A表中姓张的就这样:
select name from A where name like'张%'

%是一个通配符,相当于DOS里的*,代表任何字符。

declare @sql varchar(8000)声明一个变量@sql 长度为8000 varchar类型

select @sql=isnull(@sql+' union all ','')+' select * from ['+name+']'
from sysobjects where xtype='u' and name like 'tz2008%'
将查询出来的值赋给声明的变量@sql
查询sysobjects表,条件是xtype=u并且name是以tz2008开头的。

//解释下面的
declare @sql varchar(8000)
select @sql=isnull(@sql+' union all ','')+' select * from ['+name+']'