我正在做一个宠物项目,它将允许我将我的游戏集合存储在DB中,并在这些游戏上写笔记。游戏的单个条目是通过将所需的变量插入到我的game_information表中并从该表中输出新创建的行的PK (identity)来编码的,这样我就可以将它与注释一起插入到我的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来输出新创建的行的所有PKs,这样我就可以将它们与一个名为notes的变量一起插入到我的第二个表(game_notes)中。
目前,我有以下几点:
.csv并使用BULK INSERT将信息转储到game_information视图中。
@FileName nvarchar(200)作为BEGIN声明@sql nvarchar(最大);SET @sql =‘散装’插入myview从‘mycsv.csv’与( FIELDTERMINATOR = '','',ROWTERMINATOR =‘\n’,FIRSTROW =2 )‘EXEC(@sql)结束创建在C#中设置的WebMatrix代码
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,但我不确定这是否允许我尝试完成的任务。对此的反馈是非常感谢的。
发布于 2015-07-01 16:08:58
谢谢你的输入子宫。通过修改我的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 这将正确的ids放置到game_notes中,并将表的Note列保留为这些条目的Null。也就是说我可以运行一个简单的
"UPDATE game_notes SET Notes = @0 WHERE Notes IS NULL";将所需的注释推入正确的行。我在同一个If (IsPost)中执行这个和存储的大容量过程,所以我觉得自己受到了保护,避免了错误的意外便条更新。
发布于 2015-06-30 17:09:15
你有几个不同的选择。
如果您需要对您从CSV文件中选择的数据进行更特殊的控制,那么您可以使用OPENROWSET,但是在您的帖子中没有足够的细节可供进一步评论。
https://stackoverflow.com/questions/31144012
复制相似问题