代码之家  ›  专栏  ›  技术社区  ›  JL. Hans Passant

如何编写表脚本以生成INSERT INTO命令?

sql
  •  1
  • JL. Hans Passant  · 技术社区  · 15 年前

    我有一个查找表,大约有10条记录,我知道我可以将结构脚本化为文本文件,但是我如何编写数据脚本以插入到命令中?

    6 回复  |  直到 13 年前
        1
  •  2
  •   Dave Swersky    15 年前

    假设SQL Server…

    SQL Management Studio将生成一个插入脚本。右键单击数据库并选择“任务”“导出数据”

        2
  •  5
  •   Aric TenEyck    15 年前

    十张唱片,有急事吗?

    只需手动输入即可。应该很容易切N糊。

        3
  •  2
  •   Lucero    15 年前

    这很大程度上取决于你使用的工具…

        4
  •  2
  •   Russell Steen    15 年前

    快速而肮脏的方法是将select运行到字符串中,并告诉SQL企业管理器将文本(而不是网格)作为输出

    选择“insert into tables(fields here)”值(“+field1+”,“……

        5
  •  2
  •   cakeforcerberus    15 年前

    这样做:

    select "insert into my_targ_table(my_field_1, my_field_2, ..., my_field_n) values(" || x.my_field_1_col || ", " || x.my_field_2_col || ");"
    from my_source_table x
    

    然后运行您生成的脚本。

        6
  •  1
  •   Andreas    13 年前

    此代码适用于所有表

    DECLARE @TblName varchar(128)
    DECLARE @WhereClause varchar(255)
    DECLARE @cmd1 varchar(7000) 
    DECLARE @cmd2 varchar(7000)
    
    SET @TblName = '<tablename>' --Name of your table
    SET @WhereClause = ' ' --where clause ex columnA = 1
    SET @cmd1 = 'SELECT '' INSERT INTO ' + @TblName + ' ( '
    SET @cmd2 = ' + '' VALUES ( '' + '
    
    create table #tableDef (id int identity (1,1), ColType int, ColName varchar(128))
    
    --Fetch column names and datatypes
    insert  #tableDef (ColType, ColName)
    select case when DATA_TYPE like '%char%' then 1
                when DATA_TYPE like '%datetime%' then 2 
                else 0 end ,
        COLUMN_NAME
    from    information_schema.columns
    where   TABLE_NAME = @TblName
    order by ORDINAL_POSITION
    
    SELECT @cmd1 = @cmd1 + ColName + ',',
           @cmd2 = @cmd2
                    + ' CASE WHEN ' + ColName + ' IS NULL '
                    +   ' THEN ''NULL'' '
                    +   ' ELSE '
                    +     case ColType 
                          when  1 then  ''''''''' + ' + ColName + ' + ''''''''' 
                          when  2 then  ''''''''' + ' + 'CONVERT(VARCHAR(20),' + ColName + ')' + ' + '''''''''                    
                          else 'CONVERT(VARCHAR(20),' + ColName + ')' end
                    + ' END + '','' + '
            from    #tableDef
    order by id
    
    select @cmd1 = left(@cmd1,len(@cmd1)-1) + ' ) '' '
    select @cmd2 = left(@cmd2,len(@cmd2)-8) + '+'')'' FROM ' + @tblName + @WhereClause
    
    select '/*' + @cmd1 + @cmd2 + '*/'
    exec (@cmd1 + @cmd2)
    
    drop table #tableDef