一、事例:如果對乙個大學生三年成績的查詢通過學生學號,學生成績按學期存放在不同的表中,成績表如下:
cjxx20051 也就是存放學生2023年第一學期的成績:
cjxx20052 也就是存放學生2023年第二學期的成績:
cjxx20061 也就是存放學生2023年第一學期的成績:
cjxx20062 也就是存放學生2023年第二學期的成績:
cjxx20071 也就是存放學生2023年第一學期的成績:
cjxx20072 也就是存放學生2023年第二學期的成績:
二、問題,寫乙個儲存過程,要求根據學號查到此學生三年的各科成績彙總
--建立儲存過程---
alter proc [dbo].[getbycjbyxh]
--引數xh
@xh int
as----print @xh
---變數宣告
declare @year int
set @year=2005
-----建立臨時表#temptable用於存放學生成績資訊
create table #temptable(kch varchar(20),xnd int,xq int,fs int,bkcj int)
declare @nowyear int
set @nowyear=year(getdate())
while @year<=@nowyear
begin
declare @xq int
set @xq=1
while @xq<=2
begin
-- declare @cjxxtable1 char(9)
-- set @cjxxtable1='"cjxx'+cast(@year as char(4))+'1"'
------宣告變數·cjxxtable動態用於標記各年成績表
declare @cjxxtable char(9)
set @cjxxtable='cjxx'+cast(@year as char(4)) +cast(@xq as char(1))--此語句第一次執行為cjxx20051,二
--print @cjxxtable
if exists(select name from sysobjects where name=@cjxxtable and type='u')--判斷表cjxxtable是否存在
begin
declare @sqlstr nvarchar(1000)
set @sqlstr='insert into #temptable(kch,xnd,xq,fs,bkcj) select kcbh,'+cast(@year as char(4))+','+cast(@xq as char(1))+',cj,bkcj from '+@cjxxtable+' where xh='+cast(@xh as char(8))
---執行語句
exec sp_executesql @sqlstr
print @sqlstr
endset @xq=@xq+1
end
set @year=@year+1
endselect * from #temptable
SQL動態表查詢
在程式設計過程中,經常會遇到需要根據使用者的選擇進行查詢的情況,這時,使用者不同的選擇可能需要查詢不同的表名,而且這個表名可能還不宜事先在程式中定死,需要能動態的隨機選擇。當然還包括表名和使用者的某些資訊相關,可能不同的使用者需要進入不同的表,甚至表名的一部分就是使用者名稱的一部分,等等。對於這些情...
sql動態查詢
所以我有乙個從網頁傳遞的dict。我想基於dict動態構建查詢。我知道我可以做 session.query myclass filter by web dict 但是,僅當值完全匹配時才起作用。我需要做 像 過濾。我最好的嘗試使用 dict 屬性 for k,v in web dict.items ...
SQL實現動態交叉表 用游標實現
set quoted identifier on goset ansi nulls on goalter procedure crosstable strtablename as varchar 50 查詢表 strcol as varchar 50 strgroup as varchar 50 分...