sql-server - 从 Powershell 插入 SQL Server 数据库时,为什么我的(大)字符串会被截断?
问题描述
我正在尝试从 Powershell 脚本将一个大字符串(49,443 个字符)插入我的 SQL Server 数据库,但由于某种原因,它在 43,679 个字符后被切断。这是我的脚本:
$SqlServer = "MyServer";
$SqlCatalog = "MyDatabase";
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "MyConnectionString"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$LargeString = gc C:\SomeTextFile.txt -Raw
$SqlQuery = "INSERT INTO MyTable (LargStringColumn) VALUES ('" + $LargeString "')"
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$nRecs = $SqlAdapter.Fill($DataSet)
数据库列的类型为 varchar(max),可容纳 2GB 数据。我的研究表明,一个 powershell 字符串可以容纳大约相同数量的数据。而我实际尝试插入的数据只是其中的一小部分(97KB)。
如果我做
Write-Host $LargeString
我可以看到所有的数据。如果我使用 Out-File,也是如此。运行插入命令时,我以某种方式丢失了数据。数据确实出现在数据库中,它不是整个字符串。
为什么我的字符串插入数据库时总是被截断?
解决方案
回答这个问题我感到很尴尬,但事实证明我的原始代码是正确的,我不需要参数化我的脚本(但非常感谢你的提示,Larnu!)。实际上,整个字符串都被插入到数据库中。我将通过将字符串直接从 SSMS 复制并粘贴到记事本中来验证数据。然而,我不知道的是 SSMS 限制了返回结果的字符数。
当我将数据提取到我已经在处理的 MVC 应用程序中时,我能够验证一切是否正常工作。我猜数据的简单导出也可以!
还有,Piotr,你说的完全正确。我最终不得不做一个 $LargString.replace 以便我所有的个人引号 ' 都将替换为双引号 "。再次感谢大家的帮助!
推荐阅读
- java - 休眠搜索配置
- android - 进度条加载不显示服务器的响应?
- c++ - 如何使用谷歌基准测试自定义界面
- python - 如何在 Tkinter 中定位 TopLevel 窗口?
- javascript - ParsleyJS 中的输入字段上是否可以有多个远程/异步验证器
- python - 有没有办法使用 Python 读取和写入文件夹中的多个文本文件?
- css - Vaadin Flow 和外部 CSS(主题)
- javascript - 如何在多个 div 中切出一个洞到背景?
- reactjs - componentWillReceiveProps 到 React 钩子
- vhdl - VHDL 信号上的 1 个滴答时钟延迟和另一个上的 2 个滴答声