【问题标题】:Insert Data into SQL Table将数据插入 SQL 表
【发布时间】:2009-01-14 07:08:57
【问题描述】:

我的 DataTable 中的数据是这样的

ID ContactName1  Designation1 ContactName2 Designation2
1  A             dummy        B            sam 

我的表的表结构是

ID ContactName Designation

我将存储过程中的值传递为:

@ContactName1
@Designation1

@ContactName2
@Designation2

我想要一个插入语句来插入记录。

我怎样才能做到这一点?

【问题讨论】:

    标签: c# sql stored-procedures insert


    【解决方案1】:

    假设您的 ID 主键设置为自动递增,并且您的表包含三个字段:

    INSERT INTO DataTable (ContactName, Designation) VALUES 
        (@ContactName1, @Designation1), 
        (@ContactName2, @Designation2);
    

    根据实际 ID,如果您没有自动增量,从 Ivan 回复的评论来看,您没有,您实际上可以使用 MAX() 语句获取它:

    SELECT MAX(ID) AS max_id FROM DataTable
    

    【讨论】:

    • 如果需要,可以直接在INSERT语句中插入SELECT语句。此外,它应该是 MAX(ID)+1 恕我直言。
    • 哦,是的,正如 Cd-MaN 提到的,您必须在检索 MAX 语句后增加它。但是,一旦你从数据库中取回它,我会增加它,而不是直接在查询中进行。我发现对数据库的这些操作往往很慢。
    • 2008 之前的 SQL Server 不支持此语法。
    【解决方案2】:

    既然它是在一个存储过程中,你为什么要关心它是一个还是两个 INSERT 语句?显然,两个陈述是微不足道的。

    一些 DBMS 允许您在单个 INSERT 中列出多个值子句(@Ivan 建议这样做):

    INSERT INTO Table(ID, ContactName, Designation)
        VALUES(1, @ContactName1, @Designation1)
        VALUES(1, @ContactName2, @Designation2);
    

    我不确定值列表之间是否需要逗号。我也不清楚是否允许 Table 中的两条记录具有相同的 ID,也不清楚 ID 是如何确定的——这可能是一些自动增量的东西,不同的 DBMS 也有不同的做法。

    如果您的 DBMS 不支持单个 INSERT 语句中的多个 VALUES 子句,那么您最好接受两个 INSERT 语句。如果原子性是一个问题,您可以考虑事务 - 尽管如果这只是更大事务的一部分,则特别是错误时的 ROLLBACK 将是一个问题。如果您的 DBMS 支持 SAVEPOINTS,则该过程可以在进入时建立一个保存点,并在退出时提交或回滚到该保存点。

    【讨论】:

      【解决方案3】:

      INSERT INTO TABLENAME VALUES(按数字和顺序赋值,用逗号分隔)

      前:-

      INSERT INTO TABLENAME VALUES(1,'INDIA')

      这里有两列 S.N. &国家

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-02
        • 2010-12-17
        • 1970-01-01
        • 1970-01-01
        • 2021-02-19
        • 2013-01-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多