sqlps事务问题

时间:2015-02-16 15:12:57

标签: sql powershell ssas sqlps

我写了一个脚本,它使用sqlps来部署SSAS表格多维数据集。部署之后,我需要在多维数据集上执行一些操作,但如果我尝试访问它,我会收到一条消息,说明多维数据集不存在。但事实上,如果我将操作拆分为两个脚本(部署 - >退出sql ps - >新的sqlps会话),它确实有效(原因现在不重要,我不能这样做)

似乎sqlps会话没有看到它刚刚部署的多维数据集。我想知道是否有一个我可以运行的刷新命令,或者我是否可以在" read uncommited"中运行sqlps。状态。

1 个答案:

答案 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