当前位置:首页 » 编程语言 » sqlselect遍历
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sqlselect遍历

发布时间: 2023-08-29 10:50:28

Ⅰ 如何使用 sql 语句 遍历 数据库里的表

---找出这个表中所有类型为varchar型的字段
---不知道你的str型需要对应哪几种类型,只以varchar型为例,其他类型可以查找systypes
---将所需要的type添加到最后的type筛选语句中
select t2.name from
(
---找到主键为aaa,并且与表中aaa字段的外键相对应的表
select b.id
from
(
---找出表1中aaa外键所对应的主表和主键
select rkeyid,rkey
from
(
---找出表1中的所有外键
select a.id,b.* from sysobjects a inner join sysforeignkeys b
on a.id=b.fkeyid
where xtype='U' and name='表1'
)c
inner join
(
---找出aaa字段所在的所有表
select id from syscolumns
where name='aaa'
)d
on c.id=d.id
)a
inner join
(
---找出aaa字段所在的所有表
select id from syscolumns
where name='aaa'
)b
on a.rkeyid=b.id
)t1
inner join syscolumns t2
on t1.id=t2.id
where t2.type=39

回答修改:
根据需求,修改如下
declare @name varchar(255)
---找出主表的名字
set @name=
(select t2.name from
(---找出SampleDetails中的lngYyGlAID外键所对应的主表
---有可能SampleDetails中不只有一个外键
---如果确定只有一个外键,不用和d相交
select rkeyid
from
(
---找出SampleDetails中的所有外键
select a.id,b.* from sysobjects a inner join sysforeignkeys b
on a.id=b.fkeyid
where xtype='U' and name='SampleDetails'
)c
inner join
(
---找出lngYyGlAID字段所在的所有表
select id from syscolumns
where name='lngYyGlAID'
)d
on c.id=d.id)t1
inner join
sysobjects t2
on t1.rkeyid=t2.id)

---从主表中查出strcode字段的所有信息
declare @sql varchar(255)
set @sql='select strCode from '+@name
exec(@sql)

Ⅱ 在MySql下,怎么用SQL语句遍历一个树结构

f exists (select * from dbo.sysobjects where id = object_id(N'[tb]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

drop table [tb]
GO

--示例数据
create table [tb]([id] int identity(1,1),[pid] int,name varchar(20))
insert [tb] select 0,'中国'
union all select 0,'美国'
union all select 0,'加拿大'
union all select 1,'北京'
union all select 1,'上海'
union all select 1,'江苏'
union all select 6,'苏州'
union all select 7,'常熟'
union all select 6,'南京'
union all select 6,'无锡'
union all select 2,'纽约'
union all select 2,'旧金山'
go

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_id]') and xtype in (N'FN', N'IF', N'TF'))

drop function [dbo].[f_id]
GO

/*--树形数据处理

级别及排序字段

--邹建 2003-12(引用请保留此信息)--*/

/*--调用示例

--调用函数实现分级显示

select replicate('-',b.[level]*4)+a.name

from [tb] a,f_id()b

where a.[id]=b.[id]

order by b.sid
--*/
create function f_id()
returns @re table([id] int,[level] int,sid varchar(8000))
as
begin

declare @l int

set @l=0

insert @re select [id],@l,right(10000+[id],4)

from [tb] where [pid]=0

while @@rowcount>0

begin

set @l=@l+1

insert @re select a.[id],@l,b.sid+right(10000+a.[id],4)

from [tb] a,@re b

where a.[pid]=b.[id] and b.[level]=@l-1

end

return
end
go

--调用函数实现分级显示
select replicate('-',b.[level]*4)+a.name
from [tb] a,f_id()b
where a.[id]=b.[id]
order by b.sid
go

--删除测试
drop table [tb]
drop function f_id
go

/*--结果
中国
----北京
----上海
----江苏
--------苏州
------------常熟
--------南京
--------无锡
美国
----纽约
----旧金山
加拿大

--*/

Ⅲ SQL遍历数据库,代码语句解释

这是一存储过程,
这过程是为了查到表中的字段名类似@str的所有表
如果存在,刚输出select [fieldname] from [tablename]
if exists() --如果结果集不为空
print--则输出 select [fieldname] from [tablename]
a.xusertype是字段类型,
具体可以下语句查询select * from systypes where xtype in (175,239,231,167,56,60,108,106)
a 表为syscolumns 是系统字段表,存着当前数据库所有对象的字段名
b 表为sysobjects 是系统对象表,存着当前数据库所有的对象(表,视图,过程,索引,关健字,约束等)
xtype='U'是用户表
a.status>=0这个条件是没有用的,MSSQL 系统字段表的status都是>=0的.

整个过程核心为一个游标cursor
select s=''
from syscolumns a
join sysojbects b on a.id = b.id
where....
open cursor
fetch --读到@S
while --开始循环
execute @S
fetch
end
释放 cursor
你的问题是b.name无效? 那是有效的.b-->sysobjects

其实这个可以写得简单点不用写得这么复杂.
可以这么写:
create procere procSelect (@str varchar(100))
as
select 'select ' + A.Name + ' from ' + B.Name
from syscolumns A
left join sysobjects B on A.id = B.id
where B.xtype = 'u' and A.Name like '%' + @str + '%'
and A.xusertype in (175,239,231,167,56,60,108,106)

Ⅳ sql写语句如何循环执行10000次

调用循环执行,例如:

declare@nint
set@n=0
begin
while@n<10000
set@n=@n+1
--这里运行您要执行的1万次操作
--例如您提问中的那些动作查询

end

Ⅳ sql语句,sql怎么循环查询,把一个list中的所有值当做查询条件,查询符合这个list的所有的数据

selectf1fromtable1的结果集做为查询条件循环查询。
如:
set@a=selectf1fromtable1
foreach(@a)
{
select*fromtable2
wheref2=@a
}

Ⅵ 怎么用SQL实现日期区间遍历每天数据

以下可以达到你的要求不?
SQL code
?

SELECT 开始日期
,结束日期
,用户ID
,工作内容
FROM 基础数据
,(SELECT TO_DATE('2010/12/01', 'YYYY/MM/DD') + ROWNUM - 1 DAY_DATE FROM DUAL CONNECT BY ROWNUM < 32) DT
WHERE 基础数据.开始日期 = DT.DAY_DATE

Ⅶ sql 遍历所有表中 某项 值为已知数的查询语句

即然经典,那就多加分啦,只要输出表名:
===============================
ALTER proc Full_Search(@string varchar(50))
as
begin

declare @tbname varchar(50)
declare tbroy cursor for select name from sysobjects
where xtype= 'u ' --第一个游标遍历所有的表

open tbroy
fetch next from tbroy into @tbname
while @@fetch_status=0
begin

declare @colname varchar(50)
declare colroy cursor for select name from syscolumns
where id=object_id(@tbname) and xtype in (
select xtype from systypes
where name in ( 'varchar ', 'nvarchar ', 'char ', 'nchar ') --数据类型为字符型的字段
) --第二个游标是第一个游标的嵌套游标,遍历某个表的所有字段

open colroy
fetch next from colroy into @colname
while @@fetch_status=0
begin

declare @sql nvarchar(1000),@j int
select @sql= 'select @i=count(1) from ' +@tbname + ' where '+ @colname+ ' like '+ '''%'+@string+ '%'''
exec sp_executesql @sql,N'@i int output',@i=@j output --输出满足条件表的记录数
if @j> 0
BEGIN
select 包含字串的表名=@tbname
--exec( 'select distinct '+@colname+' from ' +@tbname + ' where '+ @colname+ ' like '+ '''%'+@string+ '%''')
END
fetch next from colroy into @colname
end

close colroy
deallocate colroy

fetch next from tbroy into @tbname
end
close tbroy
deallocate tbroy
end
go

exec Full_Search '123'

Ⅷ SQL server中遍历所有行的循环表达式怎么写

你这样试下:
UPDATE 表1 SET 表1.总数=SUM(表2.数量) FROM 表1, 表2 WHERE CHARINDEX(表2.编号, 表1.编号)=1

表二中所有001开头的对应的“数量”相加的和
select sum(数量) from 表二 group by left(编号,3)