使用批量插入或使用SQL

时间:2015-06-12 14:40:19

标签: sql-server-2008-r2 bulkinsert

需要了解以下是否可行。

我正在为新老师上传补给品。当教师是新教师时,他们可以使用我们系统中已有的默认用品,也可以发送.csv文件以获取自定义用品。

我编写了一个脚本来上传.csv文件并将其插入到数据库中。我有一个脚本,如果他们使用我们的默认值,只为新教师插入记录。我想知道这两个脚本是否可以合并。

因此,如果我的@FPath中存在该文件,我想将其上传到我的#T表中。如果它不存在,我想将默认值插入我的temp #T表。

我很熟悉如果那么我想我会使用的是什么,但我不知道怎么告诉它检查文件是否存在。< / p>

这是我目前所拥有的:

DECLARE     @Query Varchar(2000),     @TeacherKey Varchar(10)= 1234,     @FPath Varchar(100)=&#39; FilePath_1234.csv&#39;

创建表#T(     SupplyName Varchar(50),     PkgQuantity Varchar(5),     价格Varchar(9))

- 如果文件存在,我想上传它(IF @FPath存在)

SELECT @Query =&#39; BULK INSERT #T    来自&#39;&#39;&#39; + @FPath +&#39;&#39;&#39;    WITH      (FIELDTERMINATOR =&#39;&#39;,&#39;&#39;,         ROWTERMINATOR =&#39;&#39; \ n&#39;&#39;,         FIRSTROW = 2       )&#39; EXEC(@Query)

- 否则我将使用DB(ELSE)

中已有的默认值

INSERT #T(     SupplyName,     PkgQuantity,     价钱) SELECT SupplyName,PkgQty,Price     来自供应 WHERE TeacherKey = 1111

非常感谢任何帮助或指导!谢谢!

2 个答案:

答案 0 :(得分:0)

只是想记录我想出来了。我是用xp_fileexist做的。

DECLARE 
@Query Varchar(2000), 
@TeacherKey Varchar(10) = 1234, 
@FPath Varchar(100) = 'FilePath_1234.csv',
@IsExists Int

CREATE TABLE #T 
(SupplyName Varchar(50), PkgQuantity Varchar(5), Price Varchar(9))

EXEC xp_fileexist @FPath, @IsExists OUTPUT

IF @IsExists = 1 

BEGIN
SELECT @Query = ' 
BULK INSERT #T 
   FROM ''' + @FPath + ''' 
   WITH 
      (FIELDTERMINATOR ='','', 
      ROWTERMINATOR = ''\n'', 
      FIRSTROW = 2 
   )' 
EXEC (@Query)
END

ELSE

INSERT #T ( SupplyName, PkgQuantity, Price) 
SELECT SupplyName, PkgQty, Price  
FROM Supply WHERE TeacherKey = 1111

答案 1 :(得分:0)

通常,为了与SQL Server实例的主机服务器的文件系统进行交互,您希望在主系统DB中使用xp_ *存储过程。

#!/usr/bin/perl
use strict;
use warnings;

my %seen; 
my @order; 

while ( my $line = <DATA> ) {
   chomp ( $line ); 
   push ( @order, $line ) unless $seen{$line}++; 

}

foreach my $element ( @order ) { 
    print "$element, $seen{$element}\n" if $seen{$element} > 1;
}

__DATA__
abc
ghi
fed
jkl
abc
ghi
fed

可能是用于限定IF / THEN条件开关的最快方法。