Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于条件sqlserver的批量插入_Sql_Sql Server_Bulkinsert - Fatal编程技术网

基于条件sqlserver的批量插入

基于条件sqlserver的批量插入,sql,sql-server,bulkinsert,Sql,Sql Server,Bulkinsert,我正在使用大容量插入将数据导入SQL Server表 BULK INSERT MySampleDB.dbo.Sample FROM ''' + @location + ''' WITH ( FIRSTROW = 2, FIELDTERMINATOR = ''","'', ROWTERMINATOR = ''\n'', TABLOCK ) 我需要检查条件,比如列值是否为整数。如果它不是一个整

我正在使用大容量插入将数据导入SQL Server表

BULK INSERT MySampleDB.dbo.Sample 
FROM ''' + @location + '''    
WITH 
    (
     FIRSTROW = 2,    
     FIELDTERMINATOR = ''","'',      
     ROWTERMINATOR = ''\n'',     
     TABLOCK    
    )

我需要检查条件,比如列值是否为整数。如果它不是一个整数,那么我需要跳过插入的整个记录。

当脚本理解它是否为整数时使用case


在我看来,您不能在批量插入中执行此操作,但您可以通过以下步骤获得帮助

步骤1:首先,您可以向表中添加一个varchar数据类型列,以便将CSV列映射到此列

步骤2:您可以通过TRY\u CONVERT功能更新int列

   CREATE TABLE Bulk_InsertTable
    (ColImport VARCHAR(100) , ColINT INT)  
    GO
 CREATE VIEW Viev_Bulk_InsertTable
    AS SELECT ColImportVarchar
       FROM Bulk_InsertTable
    GO
    BULK INSERT Viev_Bulk_InsertTable FROM 'C:\Test.csv' 
    WITH
    (
    FIRSTROW = 2,
    FIELDTERMINATOR = ',', 
    ROWTERMINATOR = '\n', 
    TABLOCK
    )

    UPDATE Bulk_InsertTable
      SET ColINT = TRY_CONVERT(INT, ColImport);


    +--------------+-----------+
    |  ColImport   |  ColINT   |
    +--------------+-----------+
    | 669165933    | 669165933 |
    | 871543967AAA | NULL      |
    | 871543967AAA | NULL      |
    | 514321792    | 514321792 |
    | 115456712    | 115456712 |
    +--------------+-----------+