Delphi 与 SQL Server 之间的冲突
我有一个在 SQL Server 中也可以工作的查询,但是当我将它保存在 delphi 中的 ado 查询中时,它不起作用并因此错误而停止:
Incorrect syntax near 'GO'
但是下面的代码是正确的并且没有任何错误。我在sql server 中测试了它。 下面的代码不是常规的,因为我从 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;
I have a Query that works in SQL Server as well but when i save it in ado query in delphi it doesn't work and stops with this error :
Incorrect syntax near 'GO'
But the below code is correct and has not any error . i was tested it in sql server .
The below code is not Regular because i copy and past it from delphi .
My Query :
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;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
GO
关键字不是 SQL服务器声明您必须从 Delphi 代码中删除此语句才能执行您的 Sql 语句。检查此问题的示例
如何运行数据库来自 Delphi 的脚本文件?
The
GO
keyword is not a SQL Server statementYou must remove this statement from your Delphi Code in order to execute your Sql sentence. check this question for an example
How to run a database script file from Delphi?
您不能在 Delphi 查询中执行多个语句。
将每个块放在其自己的查询中的每个
go
之前,并按顺序运行它们。那么它应该可以工作。
不要将
go
语句放入 Delphi 查询中,它会隐式执行go
操作。You cannot do multiple statements in a Delphi query.
Put each block before each
go
in its own query and run them in sequence.Then it should work.
Do not put the
go
statement in the Delphi query, it doesgo
implicitly.您正在执行的是一个脚本,其中每个单独的语句都用 GO 语句分隔。
SSMS
知道如何解释这些语句并一次执行它们。ADO
不知道如何解释这些语句。您可以
TADOQuery
执行每个单独的语句。来自 GO(Transact-SQL)
What you are executing is a script where each individual statement is separated with a
GO
statement.SSMS
knows how to interprete these statements and execute them one at the time.ADO
does not know how to interprete these statements.You could either
TADOQuery
.TADOQuery
object of its own.From GO(Transact-SQL)