iT邦幫忙

0

預存程序 迴圈的動態欄位

你好:
我現在在寫一個預存程序,要update一個table,裡面總共57個欄位,依序是c1,c2...c57
目前是想要用迴圈的方式依序把各欄位的值塡入,假設不考慮塡入的值,單純就想用一個迴圈把57欄位的值自動輸入,而不使用傳統的作法..如下:update [table] set c1=...,c2=...,c3=......。目前是想用迴圈的方式寫 ,該如何做呢?

2 個回答

16
lurommou
iT邦研究生 4 級 ‧ 2008-11-18 08:24:10
最佳解答
<pre class="c" name="code">
declare @Str1 varchar(200) ,@Str2 varchar(200) , @ni int  
set @ni=1   
set @Str1='',@Str2=''  
while @ni<=57  
begin    
set @Str1=@Str1+',C'+ltrim(rtrim(cast(@ni as char(2))))   
set @Str2=@Str2+',C'+ltrim(rtrim(cast(@ni as char(2))))+'=你的值'  
set @ni=@ni+1   
end   
set @Str1=substring(@Str1,2,200)   
set @Str2=substring(@Str2,2,200)   
exec('select '+@Str1+' from Table')--查詢   
exec('update Table set '+@Str2) --更新  
jamesjan iT邦高手 1 級 ‧ 2008-11-18 08:56:11 檢舉

set @Str2=@Str2+',C'+ltrim(rtrim(cast(@ni as char(2))))+'=你的值'

這一段有問題喔,除非值都一樣

lurommou iT邦研究生 4 級 ‧ 2008-11-18 09:44:14 檢舉

^^||..是有問題,呵呵,樓主說"假設不考慮塡入的值"...所以請樓主自己舉一反三了

8
dracolu
iT邦新手 5 級 ‧ 2008-11-28 13:35:30

--MS-SQL
--以DB=pubs的TABLE=jobs為例,修改下列註解行語法.
use pubs

declare @name sysname
declare cl cursor for select name from syscolumns where id = (select id from sysobjects where name = 'jobs')
open cl
fetch next from cl into @name
while @@fetch_status = 0
begin

select 'update jobs set ' + @name + ' = [my_value] WHERE [my_condition]'
--exec('update jobs set ' + @name + ' = [my_value] WHERE [my_condition]')

fetch next from cl into @name
end
close cl
deallocate cl
--希望有幫助^^

我要發表回答

立即登入回答