Я искал ответы на эту тему, и я опубликовал их на другом форуме, но это, кажется, шрифт всех знаний. Я пытаюсь извлечь данные из базы данных SQL Server 2000 с помощью PowerShell. Сценарий Powershell вызывает хранимую процедуру, затем извлекает данные и экспортирует-csv, а CSV. Проблема в том, что поля datetime в выводимых данных потеряли миллисекунды. Это происходит, когда PowerShell извлекает данные из базы данных во временную таблицу. Вот два бита кода.Извлечение данных в миллисекундах из хранимой процедуры SQL
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 convert в varchar для datetime) в моей текстовой строке команды, так как это хранимая процедура бегемот.
Любая помощь будет полезна.
Нет, к сожалению, нет. Когда я запускаю хранимую процедуру SAP_proc (которую я создал для использования dateadd и current_timestamp), она возвращает DateTime с миллисекундами, проблема возникает при извлечении в DataSet в PowerShell, когда я просматриваю скрипт, и я просто показываю DataTable как против, чтобы экспортировать его в CSV, нет миллисекундных данных. Если я запустил SP через диспетчер SQL и экспортировал сетку результатов в CSV, у меня есть миллисекундные данные. Да, я знаю, что SP_agent плохо назван. Я не создал это программное обеспечение на сервере. – wbbigdave