gpt4 book ai didi

c# - 带有 OUTPUT 子句的 SQL Server BULK INSERT

转载 作者:太空宇宙 更新时间:2023-11-03 15:38:06 25 4
gpt4 key购买 nike

我正在从事一个宠物项目,该项目允许我将我的游戏收藏存储在数据库中并在这些游戏上写笔记。游戏的单个条目已通过将所需变量插入我的 game_information 表并从该表输出新创建的行的 PK(身份)进行编码,因此我可以将其与 game_notes 表一起插入笔记。

var id = db.QueryValue("INSERT INTO Game_Information (gamePrice, name, edition) output Inserted.gameId VALUES (@0, @1, @2)", gamePrice, name, edition); 
db.Execute("INSERT INTO Game_Notes(gameId, notes, noteDate) VALUES (@0, @1, @2)", id, notes, noteDate);

我现在正在尝试通过 csv 批量上传数据,但我如何编写一个 BULK INSERT 来输出新创建行的所有 PK,这样我就可以将它们插入到我的第二个表中(game_notes) 以及一个名为 notes 的变量?

目前我有以下内容:

  • 读取 .csv 并使用 BULK INSERT 将信息转储到 game_information View 中的存储过程

    @FileName nvarchar(200)
    AS
    BEGIN
    DECLARE @sql nvarchar(MAX);
    SET @sql = 'BULK INSERT myview
    FROM ''mycsv.csv''
    WITH
    (
    FIELDTERMINATOR = '','',
    ROWTERMINATOR = ''\n'',
    FIRSTROW = 2
    )'
    EXEC(@sql)
    END

在 WebMatrix 中创 build 置的 C# 代码

if ((IsPost) && (Request.Files[0].FileName!=" "))
{
var fileSavePath = "";
var uploadedFile = Request.Files[0];
fileName = Path.GetFileName(uploadedFile.FileName);

uploadedFile.SaveAs(//path +filename);
var command = "EXEC Procedure1 @FileName = @0";
db.Execute(command, //path +filename);
File.Delete(//path +filename);
}

这允许将 csv 记录插入到 game_information 中。

如果这对于 BULK INSERT 不可行,是否可以尝试采用类似的解决方案?

BULK INSERT into a temp_table

INSERT from temp_table to my game_information table
OUTPUT the game_Ids from the INSERT as an array(?)

then INSERT the Ids along with note into game_notes.

我也一直在查看 OPENROWSET,但我不确定这是否会允许我尝试完成的事情。非常感谢对此的反馈。

最佳答案

感谢您的输入 womp。我能够通过如下修改我的 BULK INSERT 来获得所需的结果:

BEGIN

DECLARE @sql nvarchar(MAX);
SET @sql=
'CREATE TABLE #Temp (--define table--)

BULK INSERT #Temp --Bulk into my temp table--
FROM '+char(39)+@FileName+char(39)+'
WITH
(
FIELDTERMINATOR = '','',
ROWTERMINATOR = ''\n'',
FIRSTROW = 2

)

INSERT myDB.dbo.game_information(gamePrice, name, edition, date)
OUTPUT INSERTED.gameId, INSERTED.Date INTO myDB.dbo.game_notes(gameId, noteDate)
SELECT gamePrice, name, edition, date
FROM #Temp'

EXEC(@sql)
END

这将正确的 ID 放入 game_notes 并将表的 Note 列保留为这些条目的 Null。这意味着我可以运行一个简单的

"UPDATE game_notes SET Notes = @0 WHERE Notes IS NULL";

将所需的注释插入正确的行。我在同一个 If (IsPost) 中执行此过程和存储的批量过程,所以我觉得我不会受到错误的意外笔记更新的影响。

关于c# - 带有 OUTPUT 子句的 SQL Server BULK INSERT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31144012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com