Das Problem sind nicht die Parametererstzung, sondern dass sowohl Execute und executesql in einem eigenen Prozess ablaufen, und somit keine Werte an den Hauptprozess übergeben.
Ich hab jetzt Folgendes, was funktioniert:
SQL-Code:
set @Code = 'select ct.Code into ##temphka from partner p join commtyp ct on p.HKANotificationCommTyp=ct.ID where p.ID = ' + cast(@PA_ID as varchar(10)) + ' and ct.IsByEMail=1'
execute(@Code)
set @Code = (select Code from ##temphka)
drop table ##temphka
set @MailAddress = isnull((select pc.Number from PartnerComm pc, Partner pa, CommTyp ct
where pc.Partner=pa.ID and pc.CommTyp=ct.ID and ct.Code=@Code and pa.ID=@PA_ID),'')
print @MailAddress
Ich bin mir aber irgendnie nicht ganz im Klaren, was das mit dem #3 auf sich hat. Sind das etwa temporäre Tabellen, die global gültig sind. Dann träten aber da Probleme auf, wenn die Prozedur parallel ausgeführt wird, oder?
Gibts ne Möglichkeit über T-
SQL eine
GUID zu generieren, dann hätt ich noch ne sichere Lösung.