sql - 如何仅更改连接字符串?
问题描述
显然,分析服务器中的数据库/多维数据集包含“脚本连接为 > 更改”选项,如下所示:
我想使用这样的powershell脚本:
$hashtable = @{}
Import-Csv "CSV_file" | ForEach-Object {
$hashtable += @{$($_.Server) = ($_.Cube -split '\s*,\s*') }
}
Import-Module SqlServer
foreach($server in $hashtable.Keys){
$Analysis_Server = New-Object Microsoft.AnalysisServices.Server
$Analysis_Server.connect("$server")
foreach($CUBE in $hashtable[$server]) {
####### Setting connection property for $Cube #######
"
<Alter ObjectExpansion="ExpandFull" xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<Object>
<DatabaseID>$CUBE</DatabaseID>
</Object>
<ObjectDefinition>
<DataSource xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2" xmlns:ddl100_100="http://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:ddl200="http://schemas.microsoft.com/analysisservices/2010/engine/200" xmlns:ddl200_200="http://schemas.microsoft.com/analysisservices/2010/engine/200/200" xmlns:ddl300="http://schemas.microsoft.com/analysisservices/2011/engine/300" xmlns:ddl300_300="http://schemas.microsoft.com/analysisservices/2011/engine/300/300" xmlns:ddl400="http://schemas.microsoft.com/analysisservices/2012/engine/400" xmlns:ddl400_400="http://schemas.microsoft.com/analysisservices/2012/engine/400/400" xmlns:ddl500="http://schemas.microsoft.com/analysisservices/2013/engine/500" xmlns:ddl500_500="http://schemas.microsoft.com/analysisservices/2013/engine/500/500" xsi:type="RelationalDataSource">
<ConnectionString>Connection Timeout=60;User Id=someID;Password=pass;Data Source=td.domain.com;Persist Security Info=True;Session Character Set=UTF8</ConnectionString>
</DataSource>
</ObjectDefinition>
</Alter>
"
}
}
这需要输入一个csv文件
服务器,立方体
server1.domain.com,数据库1
并遍历服务器中的数据库/多维数据集以更改其 DataSource<ConnectionString>
但是我确信该脚本中缺少某些内容,但问题是如果我在 SSMS 中运行该 XML,它会抱怨该<Name>
元素<DataSource>
是必需的。我知道需要完整的 XML,但是从我试图完成的脚本角度来看,它不会起作用,因为我无法为服务器中的其他数据库拥有相同的 DataSource。它们都可能不同,因此必须从 powershell 脚本中的 XML 查询中删除 ID、名称等。
我收到此错误
为 ALTER 语句提供的对象定义与要更改的对象引用的类型不同。
注意:我不使用分析服务器属性的原因是因为我在这里尝试的分析属性方法ConnectionString 属性不打印连接字符串
没有工作,并已上报微软作为损坏的财产,
解决方案
所以 - 基于你的其他问题的@thom schumacher 的调查结果(位于此处)
$Analysis_Server = New-Object Microsoft.AnalysisServices.Server
$Analysis_Server.connect("AX2012R2A")
#Getting current state
PS C:\Users\Administrator> $Analysis_Server.Databases | ForEach-Object {$_.datasources | ForEach-Object {$_.ConnectionSt
ring}}
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_4
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_2
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_1
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_6
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_3
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_5
#Setting the new connection string in variable
$connectionString = "Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_40"
#Assigning the variable to one of the databases
$Analysis_Server.Databases[0].datasources[0].ConnectionString = $connectionString
#Remember to update the new configuration back to the database
$Analysis_Server.Databases[0].datasources[0].Update()
#Getting the new configuration
PS C:\Users\Administrator> $Analysis_Server.Databases | ForEach-Object {$_.datasources | ForEach-Object {$_.ConnectionSt
ring}}
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_40
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_2
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_1
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_6
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_3
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_5
请注意每个列表中的第一个条目。它从DatabaseName_4变为DatabaseName_40
这就是您如何使用 PowerShell 和 SMO 仅更改连接字符串的详细信息的方式。
推荐阅读
- python - 如何按相邻值分割矩阵?
- sql-server - SQL Server:选择同一列中具有相同值的 2 行的最大日期/时间
- objective-c - 退出 if 语句时内存中的指针发生了变化
- android - Ionic App.component.html 会话未显示
- javascript - 如何检查 .class 中的第一类成员并使用悬停
- java - Java 内置库中的两个链接如何链接在一起?
- c++ - 如何在 std::unordered_map 中维护 std:: 队列而不丢失对队列所做的更改?
- flutter - 颤振返回多个小部件卡住
- javascript - 如何合并打字稿模块定义
- c# - 如何在第一次尝试时选择打开 Unity 游戏的显示器