sql - 将 c# DataTable 作为参数传递给 MS SQL Server 2008 中的存储过程

标签 sql sql-server sql-server-2008 datatable cursor

我想将 DataDable 作为参数传递给 存储过程,并包含以下列:

Supp_Id          int
Del_Methode_Id   int
Ord_Ammount      int
Promo_Id         int
Discount_Ammount Money

现在我想在存储过程中使用这个数据表,并想在它上面声明一个游标。并使用该游标将值按顺序插入到数据库表中。

请告诉我如何在存储过程中声明数据表参数,然后在该参数上使用游标

最佳答案

首先你需要创建一个类型:

CREATE TYPE dbo.whatever AS TABLE
(
  Supp_Id          int, 
  Del_Methode_Id   int,
  Ord_Amount       int,
  Promo_Id         int,
  Discount_Amount  Money
);

现在您的存储过程可以将其声明为只读输入参数:

CREATE PROCEDURE dbo.do_whatever
  @datatable dbo.whatever READONLY
AS
BEGIN
  SET NOCOUNT ON;

  INSERT dbo.destination_table(column_list)
    SELECT column_list FROM @datatable;
END
GO

你为什么要在这里使用光标,或者认为你需要一个,我不确定。您可以在 INSERT...SELECT 中添加一个 ORDER BY 子句,如果您认为这很有用(并且有一些有意义的排序依据),否则如果您真的很想要一个游标,你应该能够像对任何其他表一样声明一个针对 @datatable 的游标。

关于sql - 将 c# DataTable 作为参数传递给 MS SQL Server 2008 中的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18080022/

相关文章:

MySQL 触发新旧查询

sql - 在 SQL 中,是否可以比我使用游标的算法(参见代码)更有效地完成顺序范围选择?

sql-server-2008 - 使用顺序整数更新表

c# - 在不使用 IUserType 查询数据库时如何防止 NHibernate SqlDateTime 溢出?

sql - 使用递归公用表表达式(如 while 循环)

sql - 日期在不同服务器上显示不同

mysql - MYSQL 中的子分区

mysql - 根据上一行增加一行

c# - LINQ 使用列表从数据库中选择最后且唯一的记录

sql-server - SQL Server部分数据库备份(不包括部分表)