我编写了一个使用 sqlps 部署 SSAS 表格多维数据集的脚本。部署后,我需要对多维数据集执行几个操作,但如果我尝试访问它,我会收到一条消息,指出多维数据集不存在。但事实上,如果我将操作拆分为两个脚本(部署 -> 退出 sql ps -> 新 sqlps 会话),它确实有效(出于现在无关紧要的原因,我不能这样做)。
似乎 sqlps 会话没有看到它刚刚部署的多维数据集。我想知道是否可以运行刷新命令,或者是否可以在“未提交读取”状态下运行 sqlps。
我编写了一个使用 sqlps 部署 SSAS 表格多维数据集的脚本。部署后,我需要对多维数据集执行几个操作,但如果我尝试访问它,我会收到一条消息,指出多维数据集不存在。但事实上,如果我将操作拆分为两个脚本(部署 -> 退出 sql ps -> 新 sqlps 会话),它确实有效(出于现在无关紧要的原因,我不能这样做)。
似乎 sqlps 会话没有看到它刚刚部署的多维数据集。我想知道是否可以运行刷新命令,或者是否可以在“未提交读取”状态下运行 sqlps。
您是否使用支持 cmdlet的PowerShell 事务?看起来只有在您的脚本用完后才提交事务。
尝试将部署逻辑拆分为两个事务:创建多维数据集和您需要执行的其他操作。对于每个部分,您应该使用它自己的事务,如下所示:
Start-PSTransaction
// logic
Complete-PSTransaction
如果您需要以编程方式访问事务,则应使用TransactionScope
PowerShell 中的类比,即 Cmdlet 的CurrentPsTransaction
属性,如下所示:
using(CurrentPsTransaction)
{
... // Perform transactional work here
}
... // Perform non-transacted work here
using(CurrentPsTransaction)
{
... // Perform more transactional work here
}
更新:
您可以使用声明打开交易吗?
为事务而开发——Cmdlet 和 Provider 声明 Cmdlet 声明它们对事务的支持与它们声明对 ShouldProcess 的支持类似:
[Cmdlet(“Get”, “Process”, SupportsTransactions=True)]
提供者通过 ProviderCapabilities 标志声明他们对事务的支持:
[CmdletProvider(“Registry”, ProviderCapabilities.Transactions)]
有关 Powershell 中的隔离级别的更多信息:
IsolationLevel 设置为 Serializable 的 TransactionScope 正在锁定所有 SQL SELECT