也許會碰到這樣的問題:
有一張表有幾十個或者上百個欄位,備份後刪除了一部分資料,過後發現問題需要恢復其中一部分資料,但有幾個欄位不需要恢復 (比如 100 個欄位,只需恢復 97 個)
初學階段:
對於一個初學者可能是個噩夢:”oh, my god! 難道要手打 97 個欄位???”,一邊從網上找案例,一邊苦思冥想,折騰十幾分鍾,最終還是手打…
入門階段:
對於瞭解資料庫但不是很擅長編寫 sql 語句 (涉及系統表) 的技術人員:” 嗯…這個可以從建表語句或者用 sp_help table_name 拿到所有欄位,只需要將欄位複製出來整理一下…”,於是複製貼上,改欄位加符號,處理了幾分鐘
進階階段:
對於熟悉資料及編寫 sql 語句的技術人員:” 系統表裡面存放表的欄位資訊,在查詢欄位時可以把不需要的欄位剔除,拼接出可直接用於執行的語句…”,幾分鐘後,敲出程式碼:
declare @into_table_name varchar(50)
declare @select_table_name varchar(50)
declare @except_columns varchar(100)
declare @where_condition varchar(500)
–原表
set @into_table_name=”
–備份表
set @select_table_name=”
–排除的欄位
set @except_columns=”
–where 條件
set @where_condition=’ where 1=2′
declare @insert_str varchar(max)
declare @column_str varchar(max)
–拼接欄位
set @column_str=(
select b.name+’,’
from sysobjects a,syscolumns b
where a.id=b.id
and a.name=@table_name
and b.name not in(@except_columns)
for xml path(”))
–刪除末尾逗號
select @column_str=substring(@column_str,1,len(@column_str)-1)
–拼接 sql 語句
set @insert_str=’insert into ‘+@into_table_name+'(‘+@column_str+’) select ‘+@column_str+’ from ‘+@select_table_name+@where_condition
select @insert_str
檢查無誤後:exec(@insert_str)
類似的問題再次出現
初學者:”##$#@!@#!@#%$#%…”
入門者:” 唉…”
進階者笑了笑,從容不迫的替換引數,十幾秒後一切搞定…