【问题标题】:Data insert into table dynamically数据动态插入表中
【发布时间】:2020-11-23 18:00:00
【问题描述】:

我使用的示例查询

Declare @DataColumn table (id int not null primary key identity(1,1), ColumnName Nvarchar(250),DataValue Nvarchar(250))

insert into @DataColumn
    select DataColumnName, DataValue 
    from CustomObjectMappingTable obm 
    join @price_tmp temp on obm.ObjectFieldName = temp.FieldName 
    where temp.DataValue <> ''

select * from @DataColumn

结果是:

id  ColumnName  DataValue
-------------------------
1   Column_1    Umar Mehmood
2   Column_2    27
3   Column_3    21-nov-1992
4   Column_4    Male
5   Column_5    Gujar Khan District RWP

我有数据到临时表中,我需要使用临时表插入到物理表中。我想使用来自 temptable 的第一列数据作为“ColumnName”,第二列数据作为“Data”,我该如何做到这一点,请帮助我?

插入查询

insert into CustomData (@DataColumn.ColumnName)
    select *
    from
        (select DataValue, ColumnName
         from @DataColumn) d
    pivot
        (max(DataValue)
             for ColumnName in (ColumnName)
        ) piv;

动态需要

【问题讨论】:

  • 您使用的是哪个 dbms? (该查询是特定于产品的。)
  • SQL Server (DBMS)

标签: sql sql-server tsql


【解决方案1】:

尝试以下方法:

DECLARE @DataColumn table ( id int, ColumnName varchar(50), DataValue varchar(50) );
INSERT INTO @DataColumn VALUES
    ( 1, 'Column_1', 'Umar Mehmood' ),
    ( 2, 'Column_2', '27' ),
    ( 3, 'Column_3', '21-nov-1992' ),
    ( 4, 'Column_4', 'Male' ),
    ( 5, 'Column_5', 'Gujar Khan District RWP' );

DECLARE @insert_columns varchar(MAX) = (
    SELECT STUFF(
        ( SELECT ',[' + ColumnName + ']' FROM @DataColumn ORDER BY id FOR XML PATH( '' ) ),
        1,
        1,
        ''
    )
);

DECLARE @insert_values varchar(MAX) = STUFF ( (
    SELECT ',(' + STUFF(
        ( SELECT ',''' + DataValue + '''' FROM @DataColumn ORDER BY id FOR XML PATH( '' ) ),
        1,
        1,
        ''
    ) + ')'
), 1, 1, '' );

DECLARE @tsql varchar(MAX) = 'INSERT INTO CustomData (' + @insert_columns + ') VALUES ' + @insert_values + ';';
--EXEC(@tsql); -- Uncomment this line to execute the dynamic SQL.

PRINT @tsql;

打印出来的动态SQL:

INSERT INTO CustomData ([Column_1],[Column_2],[Column_3],[Column_4],[Column_5]) VALUES ('Umar Mehmood','27','21-nov-1992','Male','Gujar Khan District RWP');

【讨论】:

  • 非常感谢我也将遵循这种方法。我认为这是非常好的方法..谢谢严重错误
【解决方案2】:

我们可以动态使用数据透视表来做到这一点

DECLARE @cols NVARCHAR(MAX), @query NVARCHAR(MAX) , @DataValues NVARCHAR(max);
SET @cols = STUFF( (SELECT DISTINCT ','+QUOTENAME(ColumnName) FROM ##DataColumn c FOR XML PATH(''), TYPE ).value('.', 'nvarchar(max)'), 1, 1, '');

SET @query = 'SELECT * from ( select [ColumnName],[DataValue] from ##DataColumn
) as sourcetable pivot (max(DataValue) for[ColumnName] in ('+@cols+')) p order by 1 ';

Insert into customdata ( [Column_1],[Column_2],[Column_3],[Column_4],[Column_5]) 
SELECT * from ( select [ColumnName],[DataValue] from @DataColumn  ) as sourcetable 
pivot (max(DataValue) for[ColumnName] in ([Column_1],[Column_2],[Column_3],[Column_4],[Column_5])) p order by 1 

【讨论】:

    猜你喜欢
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    相关资源
    最近更新 更多