/* --
前提描述,一張
flidtab表有5
個字段。
fid是主鍵,
int型別、主動增長(
identity
)。cid
、pid
、tid
是外來鍵,
int型別、主動增長(
identity
)。fidno
由cid
、pid
、tid
組合而成,前提
cid、
pid、
tid不足
5位的新增成
5位長度。用
sql批量實現。 */
--建立表
create
table flidtab (
fid int
primary
keyidentity
(1,1),
fidno varchar
(21)
notnull,
cid int
notnull,
pid int
notnull,
tid int
notnull)go
--插入資料
insert flidtab
select
'123123'
,1,1,1
union
allselect
'qwe'
,2,3,3
union
allselect
'asd'
,3,3,1
union
allselect
'zxc'
,2,3,1 go
select
*from flidtab go
--建造用於填充位數的id
--判斷
cid長度
create
proc buildcid
@inputid int
,@outputid varchar
(5)outputas
select @outputid = cid from flidtab where fid = @inputid --
判斷長度 if
(len
(@outputid)=2)
begin
set@outputid =
'000'
+@outputid
endelseif(
len(@outputid)=3)
begin
set@outputid =
'00'
+@outputid
endelseif(
len(@outputid)=4)
begin
set@outputid =
'0'+@outputid
endelseif(
len(@outputid)=1)
begin
set@outputid =
'0000'
+@outputid
endelse
begin
set@outputid =
''end go
--判斷pid長度
create
proc buildpid
@inputid int
,@outputid varchar
(5)outputas
select @outputid = pid from flidtab where fid = @inputid --
判斷長度 if
(len
(@outputid)=2)
begin
set@outputid =
'000'
+@outputid
endelseif(
len(@outputid)=3)
begin
set@outputid =
'00'
+@outputid
endelseif(
len(@outputid)=4)
begin
set@outputid =
'0'+@outputid
endelseif(
len(@outputid)=1)
begin
set@outputid =
'0000'
+@outputid
endelse
begin
set@outputid =
''end go
--判斷tid長度
create
proc buildtid
@inputid int
,@outputid varchar
(5)outputas
select @outputid = tid from flidtab where fid = @inputid --
判斷長度 if
(len
(@outputid)=2)
begin
set@outputid =
'000'
+@outputid
endelseif(
len(@outputid)=3)
begin
set@outputid =
'00'
+@outputid
endelseif(
len(@outputid)=4)
begin
set@outputid =
'0'+@outputid
endelseif(
len(@outputid)=1)
begin
set@outputid =
'0000'
+@outputid
endelse
begin
set@outputid =
''end go
--測試
declare
@out varchar
(5)exec
buildpid 1, @out output
'---------'
+@out go
-- 建立修改儲存過程
create
proc prc_updatefidno
@id intas
declare
@cid varchar
(5),
@pid varchar
(5),
@tid varchar
(5),
@fidno varchar
(30)
exec buildcid @id, @cid output
exec buildpid @id, @pid output
exec buildtid @id, @tid output
select
@fidno =
(select fidno from flidtab where fid = f.fid)
from flidtab as f
select
@fidno =@fidno +
'_'+@cid+
'_'+@pid+
'_'+@tid from flidtab as f where f.fid=1
'---------*****===='
+@fidno --
修改資料
update
flidtab set fidno = @fidno
where fid = @id go
--測試
exec
prc_updatefidno 1 go
select
*from flidtab go
--宣告唯讀游標
declare
findfidno cursor
forselect fid from flidtab
forread only --
開啟游標
open
findfidno --
執行 declare
@fid int
fetch
next from findfidno into @fid
while
(@@fetch_status=0)
begin
exec prc_updatefidno @fid --
執行修改
fetch next from findfidno into @fid
end go
--關閉游標
close
findfidno
deallocate
findfidno go
--檢視測試結果
select
*from flidtab go
資料庫 高階查詢
巢狀查詢也叫子查詢,是把內層的查詢結果作為外層的查詢條件 語法格式 select 欄位名列表 from 表名 where 欄位名 運算子 select 欄位名 from 表名 where 條件 注意 外層的where的條件必須和內層的select查詢的欄位名一樣,個數也一樣 如 把攻擊值小於平均攻擊...
資料庫高階查詢語句
巢狀子查詢 子查詢的優勢和特點 使用靈活,可以成為sql語句的多個部分 子查詢作為查詢條件使用 子查詢作為臨時表使用 降低sql語句的複雜度,提高sql語句的可讀性 作為臨時表使用 例 select stuname subject,score from select from stuinfo whe...
MySQL資料庫高階查詢
mysql查詢 子查詢 exists和not exists子查詢 exists子查詢 在執行create 或drop語句前,可以使用exists判斷該資料庫物件是否存在,返回值是true或false。drop table if exists temp exists也可以作為where語句的子查詢 s...