【问题标题】:Best way to get csv data from sting in C# to records in SQL Server?将 csv 数据从字符串获取到 SQL Server 记录中的最佳方法?
【发布时间】:2015-07-08 15:37:38
【问题描述】:

我想从 asp.net C# 中获取 .csv 数据作为单独的记录回发到表中,并将顺序作为优先列表。

Value = 'first,2,end'

应按该顺序插入到 SQL Server 表中。

源表具有可以在存储过程中硬编码的附加列。

我有一个 Split 函数,它返回一个表变量,但无法弄清楚如何将返回的值与辅助数据一起返回到源表中。

我的桌子是这样的:

Id  int
PositionId  int
Name    varchar
ListOrder   int
Score   int
ScoreNotes  nvarchar
isrequired  int

我的 SQL 是:

INSERT INTO Skills (PositionId, Name, ListOrder, Score, ScoreNotes, isrequired) 
   SELECT
       @PositionId,
       (select positionVal, skill from dbo.fn_split ('first,sec,last', ',') ),
       null,
       null,
       @isrequired)

【问题讨论】:

  • 关系数据库没有记录顺序的真正概念。通常,表的无序视图会按照记录的插入顺序显示记录。然而,这只是一个巧合,因为这个顺序倾向于匹配自动增量/标识主键,并且倾向于匹配磁盘上的页面顺序。它恰好是有效的。但是,有各种条件可以使数据库在显示记录时更改此隐式顺序。如果您关心订单,您必须在表中有一列指示订单应该是什么。
  • 除非您的 sql server 版本非常旧(2005 或更低),否则您应该使用表值参数并在您的 c# 代码中执行拆分字符串。

标签: c# sql asp.net sql-server csv


【解决方案1】:

我认为您只需将 sql 更改为:

    create procedure myproc
         @myvalue varchar(max),
         @positionid int,
         @isrequired int
    as

    INSERT INTO Skills (PositionId,Name,ListOrder,Score,ScoreNotes,isrequired)        
           (select @PositionId,positionVal, skill, null, null, @isrequired 
     from dbo.fn_split (@myvalue, ',') )

    GO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多