一尘不染

SSMS:如何从Excel导入(复制/粘贴)数据

sql

如何从excel中复制/粘贴以下定界数据(默认情况下,使用制表符定界):

declare @t_values   nvarchar(max)   =                   
N'                
NULL    490366  NULL    NULL
NULL    490400  NULL    NULL
NULL    490402  NULL    NULL
483061  490404  10  abc1
NULL    490406  NULL    NULL
9766167 490408  3   abc2'
;

到我的临时表:

CREATE TABLE #insertTable
(   transaction_id int     
   ,user_id        int 
   ,purchase_price decimal(8,2) 
   ,mess           varchar(8)
);

注意!不使用OPENROWSET

解决方案INSERT INTO

  1. 询问
  2. 程序
  3. SNIPPET(在此处获取creae片段的快速方法)

解决方案SELECT INTO

  1. 询问

  2. SNIPPET(在此处获取creae片段的快速方法)

PS 如果您使用的是旧版SQL
Server(数据库兼容性设置低于130),则需要单独STRING_SPLIT使用。我建议以下解决方案


阅读 454

收藏
2021-03-17

共1个答案

一尘不染

请尝试以下操作:

-- NB! Script do NOT write any ifo to any table
-- to perform insert please copy/paste script output and execute

declare @tbl_name   nvarchar(128)   = '#insertTable';     -- Destination Table Name + [(column names)]
declare @dlm        nvarchar(128)   = char(9);  -- Delimiter: HT = char(9) = HorizontalTab
declare @tbl        nvarchar(max)   =               -- Paste Table Values here (from excel for instance)
N'NULL    490366  NULL    NULL
NULL    490400  NULL    NULL
NULL    490402  NULL    NULL
483061  490404  10  abc1
NULL    490406  NULL    NULL
9766167 490408  3   abc2'
;

select N'insert into '
        + @tbl_name             -- table name
        + ' VALUES(' 
        + replace               -- replace 'NULL' by NULL
          ( '''' 
             + replace          -- surround values by quotes 'value1','value2'...
               (    value
               ,    @dlm        -- Delimiter: HT = char(9) = HorizontalTab
               ,    ''','''
               ) 
             + ''''
          , '''NULL'''  
          , 'NULL'      
          )                                              
        + ');' as insertquery
--into #t 
from fn_split_string            -- insert Line per Row into table
     (  replace                 -- replace CR + LF by LF  (CR - Carriage Return, LF - Line Feed)
        (   @tbl                -- Paste Table Values here (from excel for instance)
        , char(13)+char(10)     -- CR + LF
        , char(10)              -- LF
        )
     ,char(10)
     ) 
where len(value)>0              -- skip empty rows
2021-03-17