當前位置:首頁 » 編程語言 » sqlserver游標嵌套
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sqlserver游標嵌套

發布時間: 2022-08-28 13:35:22

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層的情況,這個誰也沒規定,這是我幾個項目總結出來的實戰經驗而已,僅供參考!!! 查看原帖>>