需要了解以下是否可行。
我正在为新老师上传补给品。当教师是新教师时,他们可以使用我们系统中已有的默认用品,也可以发送.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
非常感谢任何帮助或指导!谢谢!
答案 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条件开关的最快方法。