插入/查询Varchar(max)字段SQL Server 2016

时间:2017-04-21 19:25:40

标签: sql sql-server max entity-framework-5 sql-server-2016

我有成千上万的报告,大多超过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周围完成的,但是转换应该在连接中的每一个$ _周围,现在它产生了正确的结果。

0 个答案:

没有答案