我正在使用OPENROWSET
将.csv
文件导入SQL Server 2014.
这是我的查询
SELECT
ufnGetChargeTypeId([Charge Type]) AS ChargeTypeId, [Description]
FROM
OPENROWSET ('MSDASQL',
'Driver={Microsoft Access Text Driver (*.txt, *.csv)}; DBQ=D:\Files\;',
'SELECT * from [myfile.csv]' )
[Charge Type]
是.csv
文件中的列标题。 ufnGetChargeTypeId
是一个返回ChargeTypeId
的函数,如果在表ChargeType
中找到,它是一个参考表。
如果[Charge Type]
存在,则工作正常。如果找不到,我想在表中插入[Charge Type]
并返回ChargeTypeId
。用户定义的函数不支持表中的INSERT / UPDATE。
一种解决方案是使用存储过程,但我在Select
语句中调用函数,并且您不能在Select
语句中执行存储过程。
您能否为我的问题提出任何解决方案。
答案 0 :(得分:0)
您可以先插入所有缺失的类型,然后运行查询:
DECLARE @T TABLE([Charge Type] varchar(4000), [Description] text)
INSERT INTO @T
SELECT [Charge Type], [Description]
FROM
OPENROWSET ('MSDASQL',
'Driver={Microsoft Access Text Driver (*.txt, *.csv)}; DBQ=D:\Files\;',
'SELECT * from [myfile.csv]' )
INSERT INTO ChargeTypes ([Charge Type])
SELECT DISTINCT [Charge Type]
FROM @T
WHERE [Charge Type] NOT IN (SELECT [Charge Type] FROM ChargeTypes)
SELECT
ufnGetChargeTypeId([Charge Type]) AS ChargeTypeId, [Description]
FROM @T