我在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)
如果有人帮我解决这个问题会很棒。
感谢。
答案 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”,这会破坏您的记录集。