Azure sql database 一个表达式中有多个Azure SQL防火墙规则

Azure sql database 一个表达式中有多个Azure SQL防火墙规则,azure-sql-database,firewall,rules,Azure Sql Database,Firewall,Rules,如何在一个SQL表达式中设置多个?我有许多IP地址要通过多个DB列入白名单。我希望做如下工作: 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 =

如何在一个SQL表达式中设置多个?我有许多IP地址要通过多个DB列入白名单。我希望做如下工作:

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);

在回答这个问题之前,我必须询问您将基础设施部署到Azure的方法。您使用的是ARM模板还是Powershell cmdlet?如果是这样,则值得考虑将IP列表作为参数添加到ARM模板/powershell脚本中,让您的配置管道处理规则。不要使用ARM模板或powershell cmdlet。使用Azure Portal或Azure CLI创建资源组、SQL服务器和数据库。使用Azure Portal创建防火墙规则。使用SQL Server管理。Studio创建SQL表。我的理解是,数据库级防火墙规则只能使用T-SQL创建。谢谢你的回复,我只是想确定我们谈论的是同一件事。希望我下面的回答能对你有所帮助。谢谢你的专业知识。问题:在所示的示例中,IP范围是否可能?示例:1.1.1.1-1.1.1.10或每个IP地址是否需要单独列出?是,范围是可能的。您必须记住,SQL Azure将ip范围定义为两端都包含,因此在上面的示例中,第一条规则将同时允许100.0.0.0和100.0.0.1。将CTE的IPAddressEnd字段更改为您所需的值(例如100.0.0.10),您将拥有范围规则。!非常好的回答,非常感谢。你让我的生活轻松多了。你的解决方案完美无瑕。我刚刚为22个数据库级防火墙规则运行了一个脚本(基于您的)。然后运行
SELECT*FROM sys.database\u firewall\u rules ORDER BY name和所有显示。非常非常感谢!