Delphi和SQL服务器之间的冲突

时间:2011-10-05 11:56:51

标签: sql delphi delphi-2010 sql-server-2008-r2 delphi-xe

我有一个可以在SQL Server中运行的查询,但是当我将它保存在delphi中的ado查询中时它不起作用并因此错误而停止:

Incorrect syntax near 'GO'

但是下面的代码是正确的并且没有任何错误。我在sql server中测试过它。 下面的代码不是Regular,因为我从delphi复制并通过它。

我的查询:

create function GetTedad(@pfcode INT, @pdcode INT) returns int
as begin declare @Tedad int;
select @Tedad= sum(t2.tedade_avalie) from Tbl_avalie_salon t2 where t2.FCode = @pfcode and t2.DCode = @pdcode
return (@Tedad); end;
GO
create function getSumBSen2(@pfcode INT, @pdcode INT, @pSen INT) returns int
as begin declare @r int;
select @r= sum(t2.t_shab + t2.t_rooz) from tbl_talafat_dan t2 where t2.FCode = @pfcode and t2.DCode = @pdcode and t2.sen <= @pSen;
return (@r); end;
GO
select t1.sen, sum(t1.d_rooz) as d1, sum(t1.d_shab) as d2, sum(t1.d_rooz + t1.d_shab) as d_sum,
Round((sum((1000*(t1.d_rooz+t1.d_shab)+0.01)/((dbo.GetTedad(81, 1))-(dbo.getSumBSen2(81, 1, t1.sen))))),1) as Saraneh
from tbl_talafat_dan t1 where t1.FCode =81 and t1.DCode = 1 group by t1.sen;

3 个答案:

答案 0 :(得分:5)

GO关键字不是SQL Server语句

  

GO不是Transact-SQL语句;这是一个被公认的命令   sqlcmd和osql实用程序以及SQL Server Management Studio代码   编辑器。

您必须从Delphi代码中删除此语句才能执行您的Sql语句。请查看此问题以获取示例How to run a database script file from Delphi?

答案 1 :(得分:1)

您无法在Delphi查询中执行多个语句 将每个块放在每个go之前的自己的查询中,然后按顺序运行它们。

然后它应该工作。
不要将go语句放在Delphi查询中,它隐含go

答案 2 :(得分:1)

您正在执行的是一个脚本,其中每个单独的语句都以GO语句分隔。

  • SSMS知道如何解释这些语句并在当时执行它们。
  • ADO不知道如何解释这些陈述。

你可以

  • 自己解析语句并使用TADOQuery执行每个单独的语句。
  • 将每个语句放在自己的TADOQuery对象中。

来自GO(Transact-SQL)

  

GO不是Transact-SQL语句;这是一个被公认的命令   sqlcmd和osql实用程序以及SQL Server Management Studio代码   编辑器。

     

SQL Server实用程序将GO解释为应发送的信号   当前批处理的Transact-SQL语句到SQL的一个实例   服务器。当前批次的陈述由所有陈述组成   自上次GO开始,或自特别会议开始以来或   脚本,如果这是第一个GO。