[尝试从对象获取详细信息,并将其保存到SQL表。
$GetFiles `
| Select-Object -Property Name, Type `
| Write-SqlTableData -ServerInstance $SQLServer -DatabaseName $SQLDatabase -SchemaName $SQLSchema -TableName $SQLTable -Credential $SQLCredential -Force
Que.1。上面的代码因错误而失败。删除“类型”列即可。但是有什么方法可以将Type属性转换为字符串吗?
Write-SqlTableData:.Net类型'Microsoft.Azure.Commands.DataLakeStore.Models.DataLakeStoreEnums + FileType'与列'Type'的SQL类型之间找不到映射。考虑删除该类型的列并重复操作。
Que.2。我还想添加一个额外的列称RowInsertedDate,它将具有当前时间戳记,另外一个硬编码列称LoadStatus具有值“ Started”。如何添加选择子句?
Que.3。无论如何要截断该表,然后向其中写入数据?
您需要对Select-Object
使用计算的属性,如this answer中所述:
Re 1,将Type
属性值转换为字符串([string]
):
$GetFiles |
Select-Object -Property Name, @{ Name='Type'; Expression = { [string] $_.Type } }
注意:位置参数隐式绑定到-Property
参数。
Ditto for 2,添加带有时间戳的RowInsertedDate
列和具有固定值LoadStatus
的'Started'
列:
$timestamp = Get-Date
$GetFiles |
Select-Object Name,
@{ Name='Type'; Expression = { $_.Type.ToString() } },
@{ Name='RowInsertedDate'; Expression = { $timestamp } },
@{ Name='LoadStatus'; Expression = { 'Started' } },
Re 3,首先截断目标表:
我无法亲自验证,但是我想您需要将Invoke-SqlCmd
cmdlet与Invoke-SqlCmd
(因为您正在使用Azure Data Lake)。
遵循以下内容-很明显,使用警告,因为截断是不可逆的:
U-SQL TRUNCATE TABLE
statement