A. 请教有关sqlServer嵌套查询的问题
select * from 表名 where bit='1' and char=(select char from 表名 where char='人名‘)
B. SQLServer2000存储过程是否允许游标嵌套,可以的话怎么写多谢
/* 这是我的真实实例,你可以参考 */
CREATE PROCEDURE PSFC_WIP
(
@stat_no1 varchar(6),
@wo_no1 varchar(15) ,
@type1 varchar(30) ,
@run_no1 varchar(30),
@close_id1 varchar(1)
)
AS
delete sfc_wip
SET NOCOUNT ON
DECLARE @wo_no varchar(15), @run_no varchar(30),
@qty numeric, @mpcs numeric,@moshu numeric,@type varchar(30),@close_id varchar(1),
@stat_no varchar(6),@stat_name varchar(20) ,@unit varchar(10),@type4 varchar(1)
DECLARE wout_cursor CURSOR FOR
SELECT distinct a.wo_no,a.run_no,a.qty,a.mpcs,a.moshu,a.type,b.close_id ,Left(Right(rtrim(type), 4), 1)
from sfc_wouta a left join db_d1..mf_mo b on a.wo_no=b.Mo_no COLLATE database_default
where a.wo_no like '%'+ rtrim(@wo_no1) + '%' and a.type like '%'+ rtrim(@type1 ) + '%' and a.run_no like '%'+ rtrim(@run_no1 ) + '%' and b.close_id<>@close_id
OPEN wout_cursor
FETCH NEXT FROM wout_cursor
INTO @wo_no , @run_no,@qty , @mpcs,@moshu ,@type ,@close_id ,@type4
WHILE @@FETCH_STATUS = 0
BEGIN
----内循环(取站别资料)
DECLARE statno_cursor CURSOR FOR
select stat_no,stat_name,right(rtrim(sunit),1) as unit from sfc_statno where wipyn='1'
and stat_no like '%'+rtrim(@stat_no1)+'%'
OPEN statno_cursor
FETCH NEXT FROM statno_cursor INTO @stat_no,@stat_name,@unit
IF @@FETCH_STATUS = 0
WHILE @@FETCH_STATUS = 0
BEGIN
declare @stat_nopre varchar(6)
exec Psfc_GetPreStat @type4 ,@stat_no,@stat_nopre output --获取前一站别资料
declare @starqty numeric
exec psfc_getstarqty @wo_no,@stat_no,@stat_nopre,@moshu,@starqty output --获取当前站库存
insert into sfc_wip(stat_no,stat_name,wo_no,run_no,qty,mpcs,moshu,type,unit,close_id,mqty)
SELECT @stat_no,@stat_name,@wo_no , @run_no,@qty , @mpcs,@moshu ,@type ,@unit,@close_id ,@starqty
--插入sfc_wip (将所有站别资料与流程单资料做相乘生成新记录存入sfc_wip表中)
FETCH NEXT FROM statno_cursor INTO @stat_no,@stat_name,@unit
END
CLOSE statno_cursor
DEALLOCATE statno_cursor
--结束内循环(取站别资料)
FETCH NEXT FROM wout_cursor
INTO @wo_no , @run_no,@qty , @mpcs,@moshu ,@type ,@close_id ,@type4
END
CLOSE wout_cursor
DEALLOCATE wout_cursor
GO
C. sqlserver这个如何用游标来实现
在sqlserver2000中新建一个存储过程:
CREATE PROCEDURE PK_Test
AS
//声明2个变量
declare @O_ID nvarchar(20)
declare @A_Salary float
//声明一个游标mycursor,select语句中参数的个数必须要和从游标取出的变量名相同
declare mycursor cursor for select O_ID,A_Salary from AddSalary
//打开游标
open mycursor
//从游标里取出数据赋值到我们刚才声明的2个变量中
fetch next from mycursor into @O_ID,@A_Salary
//判断游标的状态
//0 fetch语句成功
//-1 fetch语句失败或此行不在结果集中
//-2被提取的行不存在
while (@@fetch_status=0)
begin
//显示出我们每次用游标取出的值
print '游标成功取出一条数据'
print @O_ID
print @A_Salary
//用游标去取下一条记录
fetch next from mycursor into @O_ID,@A_Salary
end
//关闭游标
close mycursor
//撤销游标
deallocate mycursor
GO
连张图都没有,看看这个游标示例能不能帮你
D. SqlServer游标嵌套问题!! 想达到的效果如下图: 把科室全部加在一个新列里
declare @ks varchar(50)
declare @gh varchar(20)
declare @gh1 varchar(20)
declare @ks_add varchar(2000)
set @ks_add =''set @gh1 =''
DECLARE Cursor1 CURSOR FOR
SELECT 工号,科室 FROM mzys_1 order by 工号
OPEN Cursor1
FETCH NEXT FROM Cursor1 INTO @gh,@ks
WHILE @@fetch_status = 0
begin
if @gh1=''
begin
set @gh1 =@gh
end
if @gh1 = @gh
begin
set @ks_add=@ks_add+@ks
end
else
begin
update mzys_1 set 新科室=@ks_add where 工号=@gh1
set @ks_add=''
end
set @gh1 = @gh
FETCH NEXT FROM Cursor1 INTO @gh,@ks
end
close Cursor1
deallocate Cursor1
E. sqlserver 循环问题请教,高手帮忙
嵌套表
<br>
<br>一、嵌套表的定义:
<br>
<br> 嵌套表是表中之表。一个嵌套表是某些行的集合,它在主表中表示为其中的一列。对主表中的每一条记录,嵌套表可以包含多个行。在某种意义上,它是在一个表中存储一对多关系的一种方法。考查一个包含部门信息的表,在任何时间内每个部门会有很多项目正在实施。在一个严格的关系模型中,将需要建立两个独立的表department和project。
<br>
<br> 嵌套表允许在department表中存放关于项目的信息。勿需执行联合操作,就可以通过department表直接访问项目表中的记录。这种不经联合而直接选择数据的能力使得用户对数据访问更加容易。甚至在并没有定义方法来访问嵌套表的情况下,也能够很清楚地把部门和项目中的数据联系在一起。在严格的关系模型中,department和project两个表的联系需要通过外部关键字(外键)关系才能实现。
<br>
<br>
<br>二、举例说明嵌套表的使用:
<br>
<br> 假设有一个关于动物饲养员的表,希望其中具有他们饲养的动物的信息。用一个嵌套表,就可以在同一个表中存储饲养员和其饲养的全部动物的信息。
<br>
<br>1、创建类型animal_ty:此类型中,对于每个动物都包含有一个记录,记载了其品种、名称和出生日期信息。
<br>
<br>CREATE TYPE animal_ty AS OBJECT (
<br>
<br>breed varchar2(25),
<br>
<br>name varchar2(25),
<br>
<br>birthdate date);
<br>
<br>2、创建animals_nt:此类型将用作一个嵌套表的基础类型。
<br>
<br>CREATE TYPE animals_nt as table of animal_ty;
<br>
<br>3、创建表breeder:饲养员的信息表
<br>
<br>create table breeder
<br>
<br>(breedername varchar2(25),
<br>
<br>animals animal_nt)
<br>
<br>nested table animals store as animals_nt_tab;
<br>
<br>4、向嵌套表中插入记录
<br>
<br>insert into breeder
<br>
<br>values('mary',animal_nt(animal_ty('dog','butch','31-MAR-97'),
<br>
<br>animal_ty('dog','rover','31-MAR-97'),
<br>
<br>animal_ty('dog','julio','31-MAR-97')));
<br>
<br>insert into breeder
<br>
<br>values('jane',animal_nt(animal_ty('cat','an','31-MAR-97'),
<br>
<br>animal_ty('cat','jame','31-MAR-97'),
<br>
<br>animal_ty('cat','killer','31-MAR-97')));
<br>
<br>commit;
<br>
<br>5、查询嵌套表
<br>
<br>select name,birthdate from
<br>
<br>table(select animals from breeder);
<br>
<br>select name,birthdate from
<br>
<br>table(select animals from breeder
<br>
<br>where breedername=’mary’)
<br>
<br>where name=’dog’;
<br>
<br>三、嵌套表的特点:
<br>
<br>1、对象复用:如果编写面向对象的代码,就提高了重用以前编写的代码模块的机会。同样,如果创建面向对象的数据库对象,也就提高了数据库对象能够被重用的机会。
<br>
<br>2、标准支持:如果创建标准的对象,那么它们被重用的机会就会提高。如果有多个应用或多个表使用同一数据库对象集合,那么它就是既成事实的数据库对象标准。
<br>
<br>3、定义访问路径:对于每一个对象,用户可定义在其上运行的过程和函数,从而可以使数据和访问此数据的方法联合起来。有了用这种方式定义的访问路径,就可以标准化数据访问的方法并提高对象的可复用性。
F. SqlServer嵌套查询
select * from a where goodsid in (select b.goodsid from b ) and goodsid in (select c.goodsid from c)
或者
select * from a,b,c where a.goodsid=b.goodsid and a.goodsid=c.goodsid;
*号可以写为a.*,b.*,c.*
G. SQL Server 游标嵌套
是可以嵌套的,原理如下:declare 外层游标
open 外层游标
fetch next ...提取外层游标行
while @@FETCH_STATUS = 0
begin
declare 内层游标
open 内层游标
ftech next ...提取内层游标行
while @@FETCH_STATUS = 0
begin
.....处理内层游标
ftech next ....内层游标向下移动一行
end
close 内层游标
deallocate 内层游标
fetch next ....内层游标处理结束后,外层游标才继续向下移动一行
end
close 外层游标
deallocate 外层游标
也就是说,外层游标每移动一行,就要重复进行内层游标定义,打开,循环,关闭,释放等操作,然后才能再向下移动行实例看我的博客: http://blog.csdn.net/gxiangzi/article/details/6774786
H. 在 sqlserver 数据库中 N多表连查时 能不能嵌套 怎么嵌套
select 的命令比较多了,常用的是select 表的列名 from 表名/视图 [where 条件 group by 字段 order by 表的列名 asc/desc],当然也可以实现多表关联,select * from a,b where a.列名=b.列名 ;
当然select 可以嵌套,但必须数据库支持,sqlserver2000,oracle和mysql5.0以上都支持了,如 select * from (select * from 表名)a ,select的嵌套是比较复杂,可以实现n重嵌套的。
select 还有特殊的用法就是select * into 表名 select * from 表名
即为表的复制,好像sqlserver支持这个的。
子查询比较复杂,你可以看看一些参考书
知道的就这么多了,应该还有其他的了。
I. MYSQL数据库能否承受循环查询
MYSQL确实不够稳定不够快,我做的系统刚换成SQLserver了!!至于你说的那个循环操作当然是没什么问题了,前提是你的数据是不是海量数据(就是记录很多),如果不是那就安心使用啦!!!只要你写的代码没有逻辑错误呵呵,另外我说的数据过多会不稳定是指数据库所有表整个记录在50万条以上,单表最多记录5万条,游标嵌套超过3层的情况,这个谁也没规定,这是我几个项目总结出来的实战经验而已,仅供参考!!! 查看原帖>>