[英]Multiple Azure SQL Firewall Rules in One Expression
如何在一個 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。 任何幫助表示贊賞。
正如您在問題中所述,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);
如果您想要每行的地址范圍,我知道以上內容對大多數人都適用。 我想要一些更容易復制和粘貼的東西。
這對我有用,因為我只想要相同的 IP 開始和結束 - 所以像這樣的東西效果很好:
DECLARE @tempThings TABLE
(
ipaddr NVARCHAR(30)
);
INSERT @tempThings
VALUES
( '100.0.0.0' )
,( '100.0.0.65' )
,( '100.0.0.76' );
SELECT
*
,'EXECUTE sp_set_firewall_rule ' + 'N''Name '
+ CONVERT (NVARCHAR(5), CAST(RAND (CHECKSUM (NEWID ())) * 1000 AS INT)) + ''',' + '''' + [ipaddr] + ''',' + ''''
+ [ipaddr] + '''' + ';' [CommandList]
FROM @tempThings;
生產:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.