Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
下一步:jdbc如何允许SQL Server使用多个语句_Sql_Sql Server_Jdbc_Clojure_Clojure Next.jdbc - Fatal编程技术网

下一步:jdbc如何允许SQL Server使用多个语句

下一步:jdbc如何允许SQL Server使用多个语句,sql,sql-server,jdbc,clojure,clojure-next.jdbc,Sql,Sql Server,Jdbc,Clojure,Clojure Next.jdbc,我想对SQL Server在一次执行中运行多个语句。我使用Node.js执行此操作,但无法使用next.jdbc运行相同的查询 例如,如果我运行以下命令: (def db {:jdbcUrl "jdbc:jtds:sqlserver://localhost:1433/TESTDB;user=sa;password=passwd"}) (def ds (jdbc/get-datasource db)) (jdbc/execute! ds ["select * from

我想对SQL Server在一次执行中运行多个语句。我使用Node.js执行此操作,但无法使用next.jdbc运行相同的查询

例如,如果我运行以下命令:

(def db {:jdbcUrl "jdbc:jtds:sqlserver://localhost:1433/TESTDB;user=sa;password=passwd"})
(def ds (jdbc/get-datasource db))
(jdbc/execute! ds ["select * from EMPLOYEE;select FIRST_NAME from EMPLOYEE;"])

我还尝试将该语句包装到具有相同结果的事务中

(jdbc/execute! ds ["BEGIN TRANSACTION select * from EMPLOYEE;select FIRST_NAME from EMPLOYEE; COMMIT"])
我总是得到第一个问题

我也试过微软的JDBC驱动程序。 Sean Corfield说,如果数据库支持它,那么next.jdbc应该支持它

但我不能让它工作


解决方案

正如肖恩·科菲尔德所说

(jdbc/execute! ds ["BEGIN select * from EMPLOYEE;select FIRST_NAME from EMPLOYEE; END"] {:multi-rs true})

据我所知,SQLServer的JDBC驱动程序不支持多个语句。但是,即使它使用了,您也不应该使用它,因为它为注入型攻击打开了潜在的安全漏洞。相反,如果您确实需要执行多条SQL语句,可以将当前SQL重构为一条语句,或者在一个事务中使用多条语句


作为参考,其他一些JDBC驱动程序,如MySQL,可能支持多个语句。

是的,您可以运行多个语句和多个结果集,但您必须告诉
下一步。JDBC
这就是您想要的行为

查看运行多条语句的MS SQL Server的测试:


《入门指南》中(简要地)提到了这一点:“如果您将
:multi-rs-true
选项传递给
execute!
,您将返回结果集的向量,而不仅仅是一个结果集:零个或多个向量的向量。”

是的,MS SQL Server可以通过JDBC运行多个语句——您只需要围绕它们开始/结束。据我所知,不能通过JDBC在MySQL上运行多个语句:必须为此编写一个存储过程。其他几个数据库允许在存储过程中使用多个语句。PostgreSQL允许这样做,但实际上并没有从中返回多个结果集。@SeanCorfield。我不知道allowMultiQueries,谢谢!您的GitHub代码段不是Java代码。您应该添加一个实际的引用,显示JDBC与Java代码中的语句或准备好的语句一起使用。@TimBiegeleisen本问题的任何部分都不涉及Java语言。“next.jdbc”是一个Clojure库,问题是如何从中提取多个结果集。@TimBiegeleisen OP发布了Clojure代码,并特别提到了我所写的关于库的文档,我认为他正在尝试使用该库!