Powershell SQLAnywhere:如何获取事务开始时间戳?

Powershell SQLAnywhere:如何获取事务开始时间戳?,powershell,sqlanywhere,Powershell,Sqlanywhere,我想用SQLAnywhere 17获取事务开始时间戳 下面是Powershell中的示例脚本: Add-Type -AssemblyName ("Sap.Data.SQLAnywhere.v4.5, Version=17.0.8.40434, Culture=neutral, PublicKeyToken=f222fc4333e0d400") $connectionString = "DSN=My_Source;DBN=My_Database;UID=My_User;PWD=My_Passwor

我想用SQLAnywhere 17获取事务开始时间戳

下面是Powershell中的示例脚本:

Add-Type -AssemblyName ("Sap.Data.SQLAnywhere.v4.5, Version=17.0.8.40434, Culture=neutral, PublicKeyToken=f222fc4333e0d400")
$connectionString = "DSN=My_Source;DBN=My_Database;UID=My_User;PWD=My_Password;"
$conn = New-Object Sap.Data.SQLAnywhere.SAConnection($connectionString)
$conn.Open()

$cmd = New-Object Sap.Data.SQLAnywhere.SACommand('SELECT NOW()', $conn)
$cmd.Transaction = $conn.BeginTransaction([System.Data.IsolationLevel]'ReadCommitted')
$dt = New-Object System.Data.DataTable

0..1 | % {
    Start-Sleep $_
    $reader = $cmd.ExecuteReader()
    $dt.Clear()
    $dt.Load($reader)
    Write-Host $dt.Rows[0].ItemArray[0]
}

$cmd.Transaction.Rollback()
$cmd.Dispose()
$conn.Close() 
以及输出:

2018年6月4日上午11:40:01
2018年6月4日上午11:40:02

正如您所看到的,对NOW()函数的连续调用提供了一个不断增加的时间戳。
我也尝试过使用“选择当前时间”,但没有成功


有什么建议吗?

0..1 |%{Start Sleep$|…code continues}
-->这部分代码会增加时间戳。该循环使PowerShell休眠0秒和1秒。因此,如果当前时间是
6/4/2018 11:40:01 AM
,那么在睡眠1秒后,它一定是
6/4/2018 11:40:02 AM
。这是一种预期的行为,不是吗?是的,这是故意的:这里的目的是显示NOW()提供有效的当前时间,而在其他RDBMS(例如Postgresql)中,对NOW()的调用总是提供事务开始时间。我猜你会找到的答案是,“SQL Anywhere事务不是这样工作的。”我的观点也不是基于SQL Server的工作方式。由于(AFAIK)它们有着共同的T-SQL祖先,我可以想象它们有足够多的相似事务模型。如果您需要一个固定的日期和时间,可以从应用程序中传递它,也可以将它保存在服务器端的变量或临时表中。另见: