請問各位是否知道如何將以下動作以一次查詢就完成?[table結構]
[自動編號][欄位名稱A][欄位名稱B][欄位名稱C][欄位名稱D].....須將指定一筆資料所有欄位值以同table某一筆的值來「取代
如:
update table set(欄位名稱A,欄位名稱B,欄位名稱C,...)=(select 欄位名稱A,欄位名稱B,欄位名稱C,...from table where 自動編號=1) where 自動編號=2若欄位名稱有上百個會寫很久,而且後續維護及移植不易...不知欄位名稱如何動態取得而不是寫死的呢?

解决方案 »

  1.   

    UPDATE A SET A=B.A,B=B.B ......FROM TAB1 B ,TB A WHERE A.自動編號=1 AND B.自動編號=2 AND 条件连接
      

  2.   


    A=B.A,B=B.B ...... 這一段敘述如何才能不用這樣寫也能做到同樣目的...?
      

  3.   

    我再補充一下:
    [id] [N1] [N2] [N3] ... [N100]
     1    10   20   30  ...  1000
     2    11   21   31  ...  1001id1的資料要拿id2的資料來取代,變成:
    [id] [N1] [N2] [N3] ... [N100]
     1    11   21   31  ...  1001
     2    11   21   31  ...  1001這時,一般update語法要寫非常的長,而且同樣需求無法套用至table B,因為欄位名稱不同、數量也不同...變成又要寫一段針對table B的語句!
      

  4.   

    首先你要明白update的用法
    其次,你可以先delete那笔要更新的,再insert。再退一步,你可以选择动态语句拼接
      

  5.   


    不能先delete再insert,要更新的那筆ID有其他table在關聯,不能刪除,須保留原ID...
      

  6.   


    --建个sp试试吧,不是很完善
    -- exec usp_update 'TableName',1,2Create proc dbo.usp_update
       @table nvarchar(100),
       @id1 int,
       @id2 int
    AS
    declare @str varchar(8000)
    select @str=isnull(@str,'')+',['+rtrim(name)+']=B.['+Rtrim(name)+']'
    from syscolumns
    where object_id(@table)=id
    and [name] <>'id'
    order by colidselect @str = 'Update  A set '+stuff(@str,1,1,'')+' from '+@table+'  A, (select * from '+@table+' where id='+rtrim(@id1)+') B'
    select @str=@str+'  where A.id='+rtrim(@id2)exec(@str)GO