Как я отбрасываю ограничение внешнего ключа, только если оно существует в SQL-сервере?

Когда вы читаете из файла, вы получаете строку (или несколько строк, если вы читаете построчно). Парсер Perl анализирует только исходный код, переданный интерпретатору Perl, а не все, что вы читаете из файлов или где-либо еще. Вы можете использовать функцию eval , чтобы вычислять произвольные строки, подобные этой, как код perl и возвращать результат последнего выражения (в данном случае, список строк), но строка eval опасна, поскольку может запускать любые код; если вы случайно прочитали файл, содержащий system 'rm -rf ~/*', у вас возникла проблема.

Лучший вариант - хранить ваши данные в известном формате сериализации. Распространенным форматом, используемым для таких вещей, является JSON , потому что он аккуратно отображается в структуры данных Perl, но вы также можете просто хранить свои строки в виде строк (без синтаксиса Perl, такого как кавычки) для простого случая, подобного этому. Существует множество других опций, таких как YAML или даже XML, но их сложнее декодировать; и двоичные форматы, такие как Storable, Sereal и CBOR, но они не читаются человеком, поэтому могут взаимодействовать только с вашим кодом.

use strict;
use warnings;
use JSON::MaybeXS;
# if you store it as JSON: {"SGBK":"PRINT","SGDVD":"VIDEO"}
my %format_key = %{decode_json($output)};
# or from an even-sized array: ["SGBK","PRINT","SGDVD","VIDEO"]
my %format_key = @{decode_json($output)};

# if you store it as one value per line
my %format_key = split /\n/, $output;

222
задан Sam Saffron 31 January 2012 в 16:38
поделиться

2 ответа

Больше простого решения предоставлено в ответе Eric Isaacs. Однако это найдет ограничения на любую таблицу. Если Вы хотите быть нацеленными на ограничение внешнего ключа на определенную таблицу, используйте это:

IF EXISTS (SELECT * 
  FROM sys.foreign_keys 
   WHERE object_id = OBJECT_ID(N'dbo.FK_TableName_TableName2')
   AND parent_object_id = OBJECT_ID(N'dbo.TableName')
)
  ALTER TABLE [dbo.TableName] DROP CONSTRAINT [FK_TableName_TableName2]
304
ответ дан Salman A 23 November 2019 в 04:01
поделиться
ALTER TABLE [dbo].[TableName]
    DROP CONSTRAINT FK_TableName_TableName2
5
ответ дан Mitch Wheat 23 November 2019 в 04:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: