如何多条SQL语句执行?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何多条SQL语句执行?相关的知识,希望对你有一定的参考价值。

初学SQL....要写注册页,有name,pwd,wt,da 4个变量来取页面输入框的数据, 这样就有4条数据需要分别要插入A表的AA列 B表的BB列 C表的CC列 D表的DD列,
同时写4个插入语句执行是不能的,请问如何一条SQL语句解决?好象要用个什么关键字!最好能写出来!

1、启动visual studio 2017,点击【文件】-》【新建】-》【项目】-》创建名为【ExecuteSql】的Web项目。

2、在【新建ASP.NET Web 应用程序】界面,选择【空】、【MVC】,点击【确定】按钮,开始创建项目。

3、项目创建完成后。

4、在项目中新建文件夹【Content】用于放置JS文件,此处引用的Jquery 1.12.4版本。

5、在【Controllers】文件夹上右键,【添加】-》【控制器】,输入HomeController,并在新建好的Controller中,Index方法内部点击右键,添加视图。

6、在HomeController文件内,将默认的Index上面标记【HttpGet】,表示这个action只能通过Get方式调用。 另外添加一个HttpPost的Action。

7、在Views文件夹下,找到Index.cshtml文件,在其内部输入测试代码。

8、在Index.cshtml文件中Jquery代码。

9、修改HomeController文件中标记为HttpPost的方法。

10、点击调试运行(或者按F5),运行结果如下。

11、在【SQL语句】的框中输入测试SQL,点击【提交SQL】按钮,会弹出经过后台方法处理过的消息。

参考技术A

1、打开你的navicat for mysql

2、在打开的界面上的工具栏处,找到“query”工具,单击。

3、打开你要操作的数据库,eg:我要操作:本地》 webdb。

4、找到变亮的New Query ,单击打开。弹出一个窗口。

5、窗口中有两个tab窗口,一个是Query Editor,另一个是Query Builder。前者是需要自己手动写sql语句,后者者可以通过可视化操作,生成sql语句。

参考技术B 用Transact-SQL,直接把4个语句连起来写,每个语句间用分号(“;”)隔开即可。
"insetr into A(AA) values(name);insetr into B(BB) values(pwd);insetr into C(CC) values(wt);insetr into D(DD) values(da);" //每条sql语句间用分号隔开即可。
参考技术C 简单的方法是直接调用4次插入方法
跟方法里面添加不一样的sql语句就可以了

复杂点的话要用存储过程写,这个就比较麻烦了。
参考技术D 那就写一个存储过程来实现咯。存储过程可以实现,而你所说的除了分别用4条语句来做之外貌似没其他方法。

如何使用 OracleCommand C# 执行不同的多条 SQL 语句

【中文标题】如何使用 OracleCommand C# 执行不同的多条 SQL 语句【英文标题】:How to execute different multiple SQL statements using OracleCommand C# 【发布时间】:2019-04-10 16:52:35 【问题描述】:

我正在尝试使用 OracleCommand 执行不同的 SQL 语句。

var conn = new OracleConnection("User Id=SYSTEM;Password=mw;Data Source=SampleDataSource");
// Open the connection
if (conn.State != ConnectionState.Open)
    conn.Open();

string sql = @"
    DROP TABLE CUSTOMERS;

    CREATE TABLE CUSTOMERS (
        ID INT NOT NULL PRIMARY KEY,
        NAME VARCHAR(12) NOT NULL,
        AGE INT,
        ADDRESS VARCHAR(12)
    );

    INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS) VALUES (1, 'Mark', 28, 'NY');

    INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS) VALUES (2, 'John', 39, 'LA');

    INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS) VALUES (3, 'Andy', 48, 'CA');

    INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS) VALUES (4, 'Allan', 53, 'LA');
";

var cmd = new OracleCommand(sql, conn);
try

    cmd.ExecuteNonQuery();

catch (OracleException e)

    error = e.Message;

finally

    if (conn.State == ConnectionState.Open)
    
        conn.Close();
    

我收到以下异常。

ORA-00933:SQL 命令未正确结束

当我在 BEGIN、END 块中包含多个语句时,我得到以下异常。

ORA-06550:第 2 行,第 1 列: PLS-00103:在预期以下情况之一时遇到符号“DROP”:

( begin case declare exit for goto if loop mod null pragma raise return select update while with

【问题讨论】:

你能创建一个存储过程并使用立即执行吗?您必须使用 execute immediate 来删除表。 你也可以试试这个***.com/questions/31917301/… 立即执行是调用多个语句所需要的 可能与 Oracle 无关,但在 MS SQL Server 中,您不能在同一批次中执行删除、创建表和查询。如果 Oracle 有像 MSSQL 的 GO 这样的批处理分隔符,请尝试将其放在两者之间。 通常您不会在运行时删除或创建表。你的目的是什么? 【参考方案1】:

立即执行将使您能够执行多个语句。

OracleConnection con = new OracleConnection("User Id=SYSTEM;Password=mw;Data Source=SampleDataSource");  

if (con.State != ConnectionState.Open)
    con.Open();

OracleCommand cmd = new OracleCommand();
cmd.Connection = con;
cmd.CommandText =
    "begin " +
    "  execute immediate 'DROP TABLE CUSTOMERS';" +
    "  execute immediate 'CREATE TABLE CUSTOMERS (ID INT NOT NULL PRIMARY KEY,NAME VARCHAR(12) NOT NULL, AGE INT, ADDRESS VARCHAR(12))';" +
    "  execute immediate 'INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS) VALUES (1, 'Mark', 28, 'NY')';" +
    "  execute immediate 'INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS) VALUES (2, 'John', 39, 'LA')';" +
    "  execute immediate 'INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS) VALUES (3, 'Andy', 48, 'CA')';" +
    "  execute immediate 'INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS) VALUES (4, 'Allan', 53, 'LA')';" +
    "end;"
cmd.CommandType = CommandType.Text;
try

    cmd.ExecuteNonQuery();

catch (OracleException e)

    error = e.Message;

finally

    if (con.State == ConnectionState.Open)
    
        con.Close();
    

【讨论】:

INSERT INTO ... 不需要execute immediate 不,它也不能仅与 Drop 和 Create 语句一起使用【参考方案2】:

也许对每条语句都使用一个命令会更好。 以下是dapper 的示例。

  const string dropTableCustomers = "DROP TABLE CUSTOMERS";

  const string createTableCustomers = @"    
    CREATE TABLE CUSTOMERS (
    ID INT NOT NULL PRIMARY KEY,
    NAME VARCHAR(12) NOT NULL,
    AGE INT,
    ADDRESS VARCHAR(12))";

  const string insertCustomerMark = "INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS) VALUES (1, 'Mark', 28, 'NY')";
  const string insertCustomerJohn = "INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS) VALUES (2, 'John', 39, 'LA')";

  using (var connection = new OracleConnection("User Id=SYSTEM;Password=mw;Data Source=SampleDataSource")) 
    connection.Open();

    connection.Execute(dropTableCustomers);
    connection.Execute(createTableCustomers);
    connection.Execute(insertCustomerMark);
    connection.Execute(insertCustomerJohn);
  

如果您需要交易,您可以执行以下操作:

  public static class DbConnectionFactory 
    public static IDbConnection Create(string connectionString) 
      var connection = new OracleConnection(connectionString);
      connection.Open();

      return connection;
    
  


  const string dropTableCustomers = "DROP TABLE CUSTOMERS";

  const string createTableCustomers = @"    
    CREATE TABLE CUSTOMERS (
    ID INT NOT NULL PRIMARY KEY,
    NAME VARCHAR(12) NOT NULL,
    AGE INT,
    ADDRESS VARCHAR(12))";

  const string insertCustomerMark = "INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS) VALUES (1, 'Mark', 28, 'NY')";
  const string insertCustomerJohn = "INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS) VALUES (2, 'John', 39, 'LA')";

  using (var connection = DbConnectionFactory.Create("User Id=SYSTEM;Password=mw;Data Source=SampleDataSource"))
  using (var transaction = connection.BeginTransaction()) 

    connection.Execute(dropTableCustomers);
    connection.Execute(createTableCustomers);
    connection.Execute(insertCustomerMark);
    connection.Execute(insertCustomerJohn);

    transaction.Commit();
  

【讨论】:

【参考方案3】:
strSQL = @"Insert all into NEW1(a,b) VALUES(1,2) "
                + "INTO NEW1(a,b) VALUES(2, 3) "
                + "INTO NEW1(a,b) VALUES(3, 4) "
                + "INTO NEW2(a,b) VALUES(9, 9) "
                + "INTO NEW2(a,b) VALUES(6, 6) "
                + "SELECT * FROM DUAL";

【讨论】:

【参考方案4】:

我使用包含 DbScript 类的 DevArt 库解决了这个问题,您可以在以下 URL 找到使用示例:DbScript Class

【讨论】:

以上是关于如何多条SQL语句执行?的主要内容,如果未能解决你的问题,请参考以下文章

如何多条SQL语句执行?

如何使用 Java 执行多条 SQL 语句?

如何使用 OracleCommand C# 执行不同的多条 SQL 语句

MyBatis一次执行多条SQL语句

(学)如何在Oracle中一次执行多条sql语句

oracle如何执行多条create 语句