【问题标题】:Insert DataTable into table in StoredProcedure将 DataTable 插入存储过程中的表中
【发布时间】:2013-01-05 00:21:57
【问题描述】:

这是我的DataTable 的样子(2 列:NameCode):

Name Code

name1 code1
name2 code2
name3 code3

我想将 DataTable 插入到一个名为 MyTable 的现有表中,该表有一个主键和这两列。

我真的不知道我应该如何开始编写我的存储过程,有没有办法将DataTable 或类似的东西作为参数发送?

谢谢。

【问题讨论】:

  • 您使用的是什么 DMBS?什么版本?
  • 你的核心问题在哪里?你知道如何创建一个带参数并插入新记录的 sp 吗?如果是这样,只需使用DataAdapter 并使用CommandType=CommandType.StoredProcedure 和适当的参数创建它的InsertCommand。那么它就像DataAdapter.Update(DataTable) 一样简单。 (或使用 GarethD 提到的表值参数,here 是一个有用的链接)
  • @PilgerstorferFranz:尽管SqlBulkCopy 提供了一种将数据批量复制到 sql-server 的非常有效的方法,但这并不是 OP 所要求的。他想使用存储过程在DataTable 中插入记录。 SqlBulkCopy 有它的缺点。
  • IMO idish 要求提供一种解决方案,将完整的数据表插入到具有存储过程的数据库表中。在评论中引用另一种可能的解决方案是否被认为是不好的风格,甚至是不礼貌的(当然这不是我的意图!)?

标签: c# sql sql-server-2008 stored-procedures datatable


【解决方案1】:

在 SQL-Server 2008 中,您可以使用 table valued parameters。像这样的:

CREATE TYPE dbo.MyTableType AS TABLE 
(   Name    VARCHAR(5),
    Code    VARCHAR(5)
);
GO;
CREATE PROCEDURE dbo.MyProcedure (@MyTableType dbo.MyTableType READONLY)
AS
    INSERT dbo.MyTable (Name, Code)
    SELECT Name, Code
    FROM    @MyTableType;

GO;

然后只需将您的数据表作为 SqlCommand 中的参数 (SqlDbType.Structured) 的值传递。

或者您可以使用 SQLBulkInsert 并绕过存储过程。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多