比如说
Table 1     有字段a,b,c
Table2   有字段name  ,vvalue
数据                     a,           100
                             b,              200
                             c ,              300向Table1插入值    (100,200,300)     这些值都是从Table2获取的
这怎么写啊?

解决方案 »

  1.   

    --测试数据
    if not object_id(N'Tempdb..#T') is null
    drop table #T
    Go
    Create table #T([a] int,[b] int,[c] int)
    GO
    if not object_id(N'Tempdb..#T1') is null
    drop table #T1
    Go
    Create table #T1([name] nvarchar(21),[vvalue] int)
    Insert #T1
    select N'a',100 union all
    select N'b',200 union all
    select N'c',300
    Go
    --测试数据结束
    DECLARE @clos NVARCHAR(100) ,
        @values NVARCHAR(100) ,
        @str NVARCHAR(MAX);
    SET @clos = STUFF(( SELECT  ',' + name
                        FROM    #T1
                      FOR
                        XML PATH('')
                      ), 1, 1, '');
    SET @values = STUFF(( SELECT    ',' + RTRIM(vvalue)
                          FROM      #T1
                        FOR
                          XML PATH('')
                        ), 1, 1, '');
    SET @str = 'insert into #T(' + @clos + ') values(' + @values + ')';
    EXEC(@str);SELECT * FROM #T 
      

  2.   


         IF OBJECT_ID('tempdb..#table2') IS NOT null  DROP TABLE #table2
         CREATE TABLE #table2([name] VARCHAR(10),value INT )
         INSERT INTO #table2
         SELECT 'a',100 UNION
         SELECT 'b',200 UNION
         SELECT 'c',300 UNION
         SELECT 'd',400 UNION
         SELECT 'e',500     DECLARE @cols VARCHAR(max),@sql VARCHAR(max)
         SELECT @cols=ISNULL(@cols+',','')+QUOTENAME(name) FROM #table2
         SET @sql='SELECT * into #table1 FROM #table2
                   PIVOT(MAX(value) FOR [name] IN ('+@cols+')) c;select * from  #table1'
         EXEC(@sql)
    a           b           c           d           e
    ----------- ----------- ----------- ----------- -----------
    100         200         300         400         500