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