Конфликт между Delphi и SQL-сервером - PullRequest
1 голос
/ 05 октября 2011

У меня есть запрос, который также работает в SQL Server, но когда я сохраняю его в запросе ado в delphi, он не работает и останавливается с этой ошибкой:

Incorrect syntax near 'GO'

Но приведенный ниже код верен и не содержит ошибок. я был проверен на сервере sql. Приведенный ниже код не является обычным, потому что я копирую и вставляю его из 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 ]

5 голосов
/ 05 октября 2011

Ключевое слово GO не является оператором SQL Server

GO не является оператором Transact-SQL; это команда, признанная утилиты sqlcmd и osql и код SQL Server Management Studio редактор.

Вы должны удалить это утверждение из своего кода Delphi, чтобы выполнить предложение Sql. проверьте этот вопрос для примера How to run a database script file from Delphi?

1 голос
/ 05 октября 2011

То, что вы выполняете, - это скрипт, в котором каждый отдельный оператор отделяется оператором 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.

1 голос
/ 05 октября 2011

Вы не можете делать несколько операторов в запросе Delphi.
Поместите каждый блок перед каждым go в своем собственном запросе и выполните их последовательно.

Тогда это должно работать.
Не помещайте оператор go в запрос Delphi, он делает неявным go.

...