Стандарт SQL-92 позволяет, чтобы constaint был объявлен как ДОПУСКАЮЩИЙ ЗАДЕРЖКУ так, чтобы он мог быть задержан (неявно или явно) в рамках транзакции. К сожалению, SQL Server все еще пропускает эту функциональность SQL-92.
Для меня, изменяя ограничение на NOCHECK сродни изменению структуры базы данных на лету - отбрасывание ограничений, конечно, - и что-то, чтобы избежаться (например, пользователи требуют увеличенных полномочий).
Файлы упакованного исполняемого файла извлекаются во временный каталог (обычно / tmp / par-USERNAME / cache-XXXXXXX). Чтобы получить доступ к этим файлам, сделайте что-то вроде следующего:
#!/usr/bin/perl
# Reads a data file from the archive (added with -a)
print PAR::read_file("data");
# Will execute "script2" in the archive and exit. Will not return to this script.
require PAR;
PAR->import( { file => $0, run => 'script2' } );
Вы также можете создать символические ссылки на исполняемый файл, имя которого совпадает с именем скрипта, который вы хотите запустить, и запустить их.
Фактически, перечитывая свой вопрос, просто открывая переменная среды PAR_TEMP, вероятно, более полезна:
#!/usr/bin/perl
use File::Slurp qw(slurp);
$data_dir = "$ENV{PAR_TEMP}/inc";
$script_dir = "$data_dir/script";
print slurp("$data_dir/datafile");
# file access permissions are not preserved as far as I can tell,
# so you'll have to invoke the interpreter explicitly.
system 'perl', "$script_dir/script2", @args;
Вот кое-что, что сработало в моей системе:
C:\tmp> cat build.bat @echo off mkdir output call pp -o runner.exe runner.pl -a sayhello.bat move runner.exe output\runner.exe
C:\tmp> cat sayhello.bat @echo I am saying hello ...
C:\tmp> cat runner.pl
#!/usr/bin/perl
use strict;
use warnings;
use File::Spec::Functions qw( catfile );
my $prog_path = catfile $ENV{PAR_TEMP}, inc => 'sayhello.bat';
my $output = `$prog_path`;
print "The output was: >>> $output <<< ";
__END__
Вывод:
C:\tmp\output> runner.exe
The output was: >>> I am saying hello ...
<<<
Это кажется немного грязным.
Спасибо всем за вклад в этот ответ. Я добавляю этот ответ, чтобы выделить части бесценного вклада каждого, который я использовал, чтобы придумать решение, которое сработало для меня в моем конкретном приложении.
Приложение написано на ActiveState Perl с использованием POE и Tk и упаковано для распространения с использованием стр. Используется несколько внешних файлов; некоторые для ввода в программу (измененные данные из DNS) и некоторые для действий, предпринятых пользователем (создание и удаление записей псевдонимов DNS).
Упаковщик PAR (pp) включает внешние файлы с использованием аргумента -a. Эти файлы распаковываются в каталог \ inc по «временному» пути, созданному пакетом и доступному сценарию через
$ENV{PAR_TEMP}
. Первым шагом в решении было добавление этой информации в POE «$ heap».