Несколько правил брандмауэра Azure SQL в одном выражении - PullRequest
0 голосов
/ 30 сентября 2018

Как мне установить MULTIPLE правила брандмауэра на уровне базы данных в одном выражении SQL?У меня есть много IP-адресов для внесения в белый список на нескольких БД.Я пытаюсь сделать что-то вроде следующего:

EXECUTE sp_set_database_firewall_rule
@name = N'Test1',
@start_ip_address = 'x.x.x.x', @end_ip_address = 'x.x.x.x',
@name = N'Test2',
@start_ip_address = 'x.x.x.x', @end_ip_address = 'x.x.x.x',
@name = N'Test3',
@start_ip_address = 'x.x.x.x', @end_ip_address = 'x.x.x.x',
@name = N'Test4',
@start_ip_address = 'x.x.x.x', @end_ip_address = 'x.x.x.x',
@name = N'Test5',
@start_ip_address = 'x.x.x.x', @end_ip_address = 'x.x.x.x',,
@name = N'Test6',
@start_ip_address = 'x.x.x.x', @end_ip_address = 'x.x.x.x',
@name = N'Test7',
@start_ip_address = 'x.x.x.x', @end_ip_address = 'x.x.x.x'

Выполнение запроса выше НЕ работает.Я должен был ввести 1 за один раз.Любая помощь приветствуется.

1 Ответ

0 голосов
/ 02 октября 2018

Как вы указали в своем вопросе, синтаксис, который вы пытаетесь выполнить, не поддерживается T-SQL.То, что вы можете сделать, это использовать динамический SQL, чтобы упростить его - используйте только один оператор:

DECLARE @SQL NVARCHAR(MAX) = '';

;WITH iplists (IPAddrStart, IPAddrEnd, RuleName) AS 
(
    SELECT '100.0.0.0', '100.0.0.1', 'name0'
    UNION ALL
    SELECT '100.0.0.2', '100.0.0.3', 'name1'
    UNION ALL
    SELECT '100.0.0.4', '100.0.0.5', 'name2'
)
SELECT @SQL+= 'EXECUTE sp_set_database_firewall_rule @name = N''' + iplists.RuleName 
+ ''', @start_ip_address = ''' + iplists.IPAddrStart + ''', @end_ip_address = ''' + 
iplists.IPAddrEnd + '''; ' + CHAR(13)
FROM iplists;

--PRINT @SQL;
EXEC (@SQL);
...