表名作為變數的應用

2022-02-18 20:18:50 字數 3626 閱讀 6799

--需求:一組表(假如有20個)中,每個表都有goodsno欄位,如果這20個表的goodsno都不含值b,那麼就將這20個表的goodsno值為a的記錄的goodsno值修改為b

---------------------第一步:begin----------------------

if object_id('tempdb..#tablenames') is not null

drop table #tablenames

select '#tbname1' tbname into #tablenames

union all select '#tbname2'

union all select '#tbname3'

if object_id('tempdb..#tbname1') is not null

drop table #tbname1

create table #tbname1(goodsno varchar(max))

insert into #tbname1 values('10011001100110011001')

insert into #tbname1 values('10021001100110011001')

if object_id('tempdb..#tbname2') is not null

drop table #tbname2

create table #tbname2(goodsno varchar(max))

insert into #tbname2 values('66ads1001100110011001')

if object_id('tempdb..#tbname3') is not null

drop table #tbname3

create table #tbname3(goodsno varchar(max))

insert into #tbname3 values('30011001100110011001')

if object_id('tempdb..#tablenamesaddrownum') is not null

drop table #tablenamesaddrownum

select identity(int,1,1) rowindex,tbname into #tablenamesaddrownum from #tablenames order by tbname

---------------------第一步:end----------------------

---------------------第二步:begin----------------------

select * from #tbname1

select * from #tbname2

select * from #tbname3

---------------------第二步:end----------------------

初始資料結果:

---------------------第三步:begin----------------------

declare @tbname varchar(30);--表名稱

declare @goodsoldvalue varchar(20);--要判斷的goodsno指定值

declare @goodsnewvalue varchar(20);--要修改的goodsno指定值

declare @goodsnonum int;--每個表中是否存在goodsno指定值

declare @tbnum int;--表數量

declare @tbindex int;--表索引

declare @samevaluenum int;--goodsno指定值數量

select @tbnum=count(*) from #tablenamesaddrownum

set @goodsnonum=100;

set @tbindex=1;

set @samevaluenum=0;

set @goodsoldvalue='10021001100110011001';

set @goodsnewvalue='333333333';

while (@tbnum>=@tbindex)

begin

select @tbname=tbname from #tablenamesaddrownum where rowindex=@tbindex

if object_id('tempdb..##num') is not null

drop table ##num

--exec ('select count(*) num into ##num from '+@tbname +' where goodsno ='+@goodsnewvalue)

exec ('select count(*) num into ##num from '+@tbname +' where goodsno ='''+@goodsnewvalue+'''')

select @goodsnonum=num from ##num

if(@goodsnonum=0)

begin

set @samevaluenum=@samevaluenum+1;

endset @tbindex=@tbindex+1;

endprint @tbnum;

print @samevaluenum;

set @tbindex=1;

if(@tbnum=@samevaluenum)

begin

while (@tbnum>=@tbindex)

begin

select @tbname=tbname from #tablenamesaddrownum where rowindex=@tbindex

--exec ('update '+@tbname +' set goodsno='+@goodsnewvalue+' where goodsno='+@goodsoldvalue)

exec ('update '+@tbname +' set goodsno='''+@goodsnewvalue+''''+' where goodsno='''+@goodsoldvalue+'''')

set @tbindex=@tbindex+1;

end

end---------------------第三步:end----------------------

---------------------第四步:begin----------------------

select * from #tbname1

select * from #tbname2

select * from #tbname3

---------------------第四步:end----------------------

修改後的結果:

Sql Server中用變數名作為表名的解決方案

最近寫 procedure 遇到一些問題。其中我覺得關於 用變數名作為表名 的問題較有價值,寫出和大家一起分享。請各位若有好的解決方案一定要不吝賜教。情景 如果你在寫 procedure 時要根據特定變數的值動態建立 table 表名是全部或部分特定變數的值 例如 declare tablename...

pymysql以表名作為變數傳遞進查詢語句中

在使用cursor.execute sql,param 時,pymysql庫會自動轉義含有 s的字串,所以不要畫蛇添足在sql語句中給 s加引號了,會報1064的錯誤滴!另外也有許多人使用有sql注入隱患的cursor.execute sql param 這種用法,這樣是可以給 s加引號的。在我們學...

儲存過程 動態sql 將動態列名作為變數傳值

背景 這兩天有個需求,每天並且每10分鐘從es取一次資料 每次大概五萬多條車輛資料 每台車有veh,vom兩欄位,vom為車輛狀態資訊 會改變 每十分鐘都要記錄一次車輛狀態,將此資訊存在資料庫的veh state表裡面。再將這些資料用echarts表現出來 後話 所以,資料庫表的列名定為 veh,d...