【问题标题】:Invoke-Sqlcmd : Could not find stored procedureInvoke-Sqlcmd:找不到存储过程
【发布时间】:2021-05-28 03:08:54
【问题描述】:

我有一个只包含数据的 SQL 数据库表的转储。它是一长串 INSERT 语句。该文件约为 10GB,当我尝试使用 Invoke-Sqlcmd 或 SQL Server 管理工作室导入时,它会失败并显示“内存不足”消息。因此,我将文件拆分为几个 250MB 的较小文件。所有的行都是完整的,因此每个文件的末尾或开头都没有半 INSERT 语句,因为拆分文件。

当我使用 Powershell 导入数据时,第一个文件导入时没有问题。

Invoke-Sqlcmd -ServerInstance myserver\instance -Database mydatabase -InputFile "C:\temp\files\dbo.Data.00.sql"

每当我尝试导入下一个文件时,都会收到以下错误消息。

Invoke-Sqlcmd : Could not find stored procedure 'I'.
At line:1 char:1 
+ Invoke-Sqlcmd -ServerInstance myserver\instance -Database mydatabase -I ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Invoke-Sqlcmd], SqlPowerShellSqlExecutionExceptio
    + FullyQualifiedErrorId : SqlError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand

它提到无法找到存储过程,但它只是 INSERT 语句。我还尝试在第一个 INSERT 语句之前指定数据库名称,但这不会改变结果。

USE [mydatabase]

任何想法这里出了什么问题。

【问题讨论】:

    标签: sql-server-2016 invoke-sqlcmd


    【解决方案1】:

    我设法通过将转储文件复制到 Linux 主机并使用以下命令将文件拆分为每个 250.000 行的文件来解决此问题。

    split -l 250000 dbo.Data.sql
    

    拆分文件仍然存在问题。除第一个文件外,所有文件的每个字符之间都包含 NUL 字符。

    我使用以下解决方案来删除 NUL 字符。 Removing "NUL" characters

    通过对除第一个之外的所有拆分文件执行以下命令。

    tr < xab -d '\000' > xab.dbo.Data.sql
    tr < xac -d '\000' > xac.dbo.Data.sql
    etc...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-01
      • 2018-04-08
      • 2010-10-25
      • 1970-01-01
      相关资源
      最近更新 更多