我有成千上万的报告,大多超过8000个字符。我有一个表设置,它是3个较短的字段(varchar(7),nchar(9),varchar(4)和一个名为report(varchar(max))。通过以下powershell我将报告加载到SQL Server 2016:< / p>
function load_data {
Param (
[String]$SourceDir,
[String]$Table
)
Get-Childitem $SourceDir | % {
$name = $_.BaseName.Split('_')
$content = (Get-Content $_.FullName)
$sqlcontent = ""
$content | % {
$sline = $_.replace("'", "''")
# the line below=wrong and should contain the cast see update below
$line = "'" + $sline + "'+CHAR(10)+"
$sqlcontent = $sqlContent + $line
}
$sqlcontent = $sqlcontent.Trim('+')
# Insert in SQL
$sqlcommand = "INSERT INTO $Table VALUES("
$sqlcommand += "'" + $name[1].TrimStart('0') + "',"
$sqlcommand += "'" + $name[0] + "',"
$sqlcommand += "'" + $name[2] + "',"
$sqlcommand += "CAST(" + $sqlcontent + " AS nvarchar(MAX))"
$sqlcommand += ")"
Invoke-Sqlcmd -Query $sqlcommand -ServerInstance $sqlServerInstance -Database $sqlDatabase -OutputSqlErrors $true
}
}
load_data $dir $table
以上运行没有错误(因此没有截断错误)。
现在我不确定通过上面的内容加载了超过8000个字符的内容。当我查询SQL select *, len(report) from TABLE where len(report) > 7999
时,我似乎只返回了8000个字符。当我从SQL Server管理器复制并粘贴内容时,我只获得前8000个字符。
(最后ASP.Net Entity Framework网络应用程序应该选择并显示报告)。
所以我不确定我是插错还是查询错了。
UPDATED :我修复了它:)在上面的PowerShell中,Cast是在完整的$ sqlcontent周围完成的,但是转换应该在连接中的每一个$ _周围,现在它产生了正确的结果。