PowerShell을 사용하여 SqlBulkCopy와 함께 DataTable 삽입, datetime 열 보유

datatable datetime powershell sqlbulkcopy sql-server

문제

Data.SqlClient.SqlBulkCopy 사용하여 미리 정의 된 DataTable 을 SQL Server 데이터베이스에 삽입하려고합니다.

DataTable 에는 다른 데이터 유형이 있지만 Datetime 열에는 문제가 있습니다.

이 같은:

$Datatable.Columns.Add((New-Object System.Data.DataColumn 'mydate',([datetime])))

나는 칼럼에 데이터를 가지고 있으며, 나에게는 괜찮아 보인다.

내가 $row.'mydate'.Month 것처럼. $row.'mydate'.Month 내가 기대할 달을 얻는다.

따라서 데이터 테이블에 올바른 데이터가 채워진 것처럼 보입니다.

하지만 내가 달릴 때

$bulkCopy.WriteToServer($DataTable)

이 오류가 발생합니다.

데이터 소스의 String 유형의 지정된 값을 지정된 대상 열의 datetime 유형으로 변환 할 수 없습니다.

이것이 내가 얻지 못한 첫 번째 것입니다. 왜 datetime인지 내 데이터 유형이 문자열이라고 말합니까? SqlBulkCopy 모든 데이터를 문자열로 변환합니까?

나는 데이터베이스에 직접 문제를 재현하려고 시도했는데 이것이 내가 가진 것이다.

그것은 날짜의 형식과 관련이 있습니다. 이 '22-02-2017' 삽입 할 수 없습니다 . 하지만이 '02-22-2017' 삽입 할 수 있습니다 .

따라서 분명히 datetime 형식에는 혼란이 있습니다.

SqlBulkCopy 가 데이터 테이블에서 데이터가 정확할 때 SqlBulkCopy '를 하루 대신 SqlBulkCopy 삽입하려고하는 이유는 무엇입니까?

나는 이것이 문화적 일 수 있다고 생각하고 있습니다. 그러나 데이터베이스 문화와 워크 스테이션 문화가 조화를 이룬 것 같습니다. 그러나 나는 Powershell 스크립트의 culture를 다음과 같이 변경하려고 시도했다.

function Set-Culture([System.Globalization.CultureInfo] $culture)
{
    [System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture
    [System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
}
$culture = [System.Globalization.CultureInfo]::GetCultureInfo('en-US')
Set-Culture $culture

이것은 데이터를 콘솔에 기록 할 때 날짜와 월을 전환하지만 BulkCopy 오류에는 영향을주지 않습니다.

너희들은 무슨 일이 벌어지고 있는지 알기나 해?

인기 답변

데이터 집합 시퀀스는 테이블 열 시퀀스와 동일해야합니다.

CREATE TABLE [dbo].[tmp](
[IP] [varchar](16) NOT NULL,
[USER] [nvarchar](50) NOT NULL,
[DT] [date] NOT NULL



PS> $DataSet

    IP             User          DT               
    --             ----          --                   
172.16.11.11   SysCopyUser   2017-05-11 15:29:29 


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.