Groovy使用sql server数据库一起插入和选择查询

时间:2015-06-04 16:20:42

标签: sql-server sql-server-2008 groovy

我在groovy代码中执行sql server查询时遇到一些问题。我的要求是,我需要从表ABC.customer中读取数据并将数据存储到临时表测试中。

我的查询是:

DECLARE @throughDate datetime,
        @startDate datetime
DECLARE @test TABLE (
  test_id char(50)
)
SET @throughDate = '5-27-2015'
SET @startDate = DATEADD(YEAR, -1, @throughDate)
INSERT INTO @test
  SELECT
    test_id
  FROM ABC.customer
  WHERE ISNULL(create_date, '1-1-1900') BETWEEN @startDate AND @throughDate
  AND DATEDIFF(MINUTE, ISNULL(create_date, '1-1-1900'), ISNULL(last_login, '1-1-1900')) < 1

我没有连接问题。我可以查询其他表和数据。但插入和选择的组合对我来说不起作用。

我的常规代码是:

def sql=Sql.newInstance("jdbc:sqlserver://localhost","test","test","com.microsoft.sqlserver.jdbc.SQLServerDriver")


sql.eachRow("""DECLARE  @throughDate DATETIME, @startDate DATETIME
DECLARE @test TABLE(test_id CHAR(50))
SET @throughDate = '5-27-2015' 
SET @startDate = DATEADD(YEAR,-1,@throughDate) 
INSERT INTO @test  SELECT test_id FROM ABC.customer  
WHERE ISNULL(create_date,'1-1-1900') BETWEEN @startDate AND @throughDate  
AND DATEDIFF(minute,ISNULL(create_date,\'1-1-1900\'),ISNULL(last_login,\'1-      
1-1900\')) < 1
select test_id FROM @test
"""){
   println "Value is ${it}"
 }

代码抛出以下异常:

  

抓到:com.microsoft.sqlserver.jdbc.SQLServerException:该语句   没有返回结果集。   com.microsoft.sqlserver.jdbc.SQLServerException:该语句没有   返回结果集。在   com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)     在   com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:800)     在   com.microsoft.sqlserver.jdbc.SQLServerStatement $ StmtExecCmd.doExecute(SQLServerStatement.java:689)     在   com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)     在   com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715)     在   com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:180)     在   com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:155)     在   com.microsoft.sqlserver.jdbc.SQLServerStatement.executeQuery(SQLServerStatement.java:616)     在DataVisualization.SqlServerTest.main(SqlServerTest.groovy:104)

如果有人帮我解决这个问题会很棒。

感谢。

1 个答案:

答案 0 :(得分:1)

尝试在第一个SET:

之前的查询语句中添加“SET NOCOUNT ON”
DECLARE  @throughDate DATETIME, @startDate DATETIME
DECLARE @test TABLE(test_id CHAR(50))
SET NOCOUNT ON
SET @throughDate = '5-27-2015' 

sql-server将为每个insert / update / select语句打印一些文本消息而不使用“NOCOUNT”,这会破坏您的记录集。