Recebo a mensagem de erro acima quando executo o seguinte script perl do cmd, que deve fazer alguma transação no meu banco de dados.
#!/usr/bin/perl.
use warnings;
use strict;
my ( $pid1, $pid2, $pid3, $i ); #Declaration of local variables
$| = 1;
if ( ($pid1 = fork()) && ($pid2 = fork()) && ($pid3 = fork()) ) { #Starts child processes
print( "I have to wait for my kids.\n" ); #The main process execute this code
my $straggler = wait(); #The main process waits for all the children to finish
print( "Finally $straggler finished, now I can go.\n" );
}
elsif ( $pid1 && $pid2 && defined($pid3)) { #Is executed by the third child
sleep( 1 ); #Wait 1 second
print( "Start moving money between account 1 - 2" );
sleep(2);
for ($i=0; $i < 1000; $i++) { #Start transaction repeatedly
system("sqlcmd -S DESKTOP-U368A1B -Q tranKonto(1,2,100,1)"); #Moves 100 from account 1 to account 2
}
print( "End moving money between accounts trans 1 - 2 " );
exit();
}
else {
die( "Forking problems: " );
}
A transação fica assim:
PROCEDURE [dbo].[tranKonto] @konto1 INT, @konto2 INT, @belopp INT, @isoLevel INT
AS
BEGIN TRANSACTION tranKonto
IF(@isoLevel=0)
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
ELSE IF (@isoLevel = 1)
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
ELSE IF (@isoLevel=2)
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
ELSE IF(@isoLevel=3)
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN
UPDATE Konto SET belopp=belopp-@belopp WHERE kontonr=@konto1
UPDATE Konto SET belopp=belopp+@belopp WHERE kontonr=@konto2
EXEC kontoLog_SP @konto1, @konto2 , @belopp , @isoLevel;
END
COMMIT TRANSACTION tranKonto
RETURN
Recebo a seguinte mensagem de erro ao executar o script:
Msg 102, Level 15, State 1, Server DESKTOP-U368A1B, Line 1 Sintaxe incorreta perto de '1'.
Agradeceria muito se alguém pudesse me ajudar. Eu tentei google uma solução, mas não tive sorte.
Você deve remover os parênteses em torno dos parâmetros para seu procedimento armazenado e colocar a chamada entre aspas duplas. Em uma linha de comando normal, ficaria assim:
Como isso está em perl, você precisará escapar das aspas: