SQL 服务器:如果在 table 中未通过 Select 中的函数找到记录,则插入记录
SQL Server: Insert record if not found in table from a function in Select
我正在使用 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
文件中的第 header 列。 ufnGetChargeTypeId
是一个函数 returns ChargeTypeId
如果在 table ChargeType
中找到它是一个引用 table。
如果 [Charge Type]
存在则工作正常。如果找不到,我想在 table 和 return ChargeTypeId
中插入 [Charge Type]
。用户定义的函数不支持 table.
中的 INSERT/UPDATE
一种解决方案是使用存储过程,但我在 Select
语句中调用函数,您不能在 Select
语句中执行存储过程。
你能为我的问题提出任何解决方案吗?
您可以先插入所有缺失的类型,然后 运行 您的查询:
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
我正在使用 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
文件中的第 header 列。 ufnGetChargeTypeId
是一个函数 returns ChargeTypeId
如果在 table ChargeType
中找到它是一个引用 table。
如果 [Charge Type]
存在则工作正常。如果找不到,我想在 table 和 return ChargeTypeId
中插入 [Charge Type]
。用户定义的函数不支持 table.
一种解决方案是使用存储过程,但我在 Select
语句中调用函数,您不能在 Select
语句中执行存储过程。
你能为我的问题提出任何解决方案吗?
您可以先插入所有缺失的类型,然后 运行 您的查询:
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