我一直在寻找有关此主题的答案,并已在另一个论坛上发帖,但这似乎是所有知识的字体。我正在尝试使用 PowerShell 从 SQL Server 2000 数据库中提取数据。Powershell 脚本调用一个存储过程,然后提取数据并将其导出到 CSV 文件中。问题是输出数据中的日期时间字段已经丢失了毫秒。当 PowerShell 将数据库中的数据提取到临时表中时,就会发生这种情况。这是两段代码。
PowerShell 脚本
#VARIABLES
$SqlQuery = "SAP_proc"
#Connection Strings
$Server = "server"
$Database = "db_dab"
#Output Files
$OutputPath = "c:\Sapout.csv"
#END OF VARIABLES
#SQL Connection
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=$Server;Database=$Database;Integrated Security=True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "SAP_proc"
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$DataOut = $SqlAdapter.Fill($DataSet)
#$DataOut = $SqlAdapter.FillSchema($DataSet,[System.Data.SchemaType]::Source)
#Data Manipulation
$DataOut | Out-Null
#Export Data to Hash Table
$DataTable = $DataSet.Tables[0]
#Export Has table to CSV
$DataTable | Export-CSV -Delimiter "," -Encoding Unicode -Path $OutputPath -NoTypeInformation
$SqlConnection.Close()
存储过程
ALTER proc [dbo].[SAP_proc]
as
DECLARE @return_value int
DECLARE @starttime datetime
DECLARE @endtime datetime
SET @starttime = DATEADD (dd, -30, CURRENT_TIMESTAMP)
SET @endtime = CURRENT_TIMESTAMP
EXEC @return_value = [dbo].[sp_agent]
@starttime
,@endtime
SELECT 'Return Value' = @return_value
因为其他存储过程SP_agent
是由软件创建的,所以我无法编辑它。此外,我不想在我的命令文本字符串中复制软件定义的存储过程(使用 SELECT 转换为日期时间的 varchar),因为它是一个庞然大物的存储过程。
任何帮助都会非常有用。