【问题标题】:"The target database schema provider could not be determined" With VSDBCMD but Only When /ConnectionString is Specified“无法确定目标数据库架构提供程序”使用 VSDBCMD 但仅在指定 /ConnectionString 时
【发布时间】:2013-05-08 01:45:36
【问题描述】:

我一直在开发一个部署脚本来将我们的数据库项目部署到多个数据库实例。我正在通过手动运行它来测试它。这是一个非常简单的脚本,只需针对为部署我们的基础数据库或模板数据库而创建的部署清单运行 VSDBCMD。为了部署到同一服务器上的不同数据库,该脚本使用部署清单,但随后还指定了 /p:DatabaseName 和 /p:TargetDatabase 属性。

这已经工作了一整天了。

我们对这些数据库使用 SQL Server 身份验证,我希望能够将用户名和密码指定为脚本的参数,这样就不必对它们进行硬编码。我能看到的唯一方法是使用 /ConnectionString 开关。这就是导致失败的原因。即使我指定了与部署清单中存储的完全相同的连接字符串,脚本也会失败并显示错误“无法确定目标数据库架构提供程序”。脚本:

function DeployDatabase([string] $manifestPath, [string] $password, [string] $instance, [string] $server, [string] $user)
{
    $vsdbcmdPath = "c:\Program Files (x86)\Microsoft Visual Studio 10.0\VSTSDB\Deploy"
    $vsdbcmd = "$vsdbcmdPath\vsdbcmd.exe"
    $outputScriptPath = "$instance.sql"
    $logPath = "$instance.log"
    $connectionString = "Data Source=$server;User ID=$user;"
    & $vsdbcmd /dd /dsp:SQL /manifest:$manifestPath /a:Deploy /p:DatabaseName=$instance /p:TargetDatabase=$instance /script:$outputScriptPath /cs:"$connectionString" | 
        Out-File -FilePath $logPath
}

# Actual call is omitted to protect the $server, $user and $password

只需省略 /cs 开关即可再次成功。请注意,从上面的连接字符串中,甚至不需要在连接字符串中指定密码即可导致失败。

目标数据库服务器正在运行 SQL Server 2008 R2,并且是最新的补丁。

我想知道如何避免这个错误,或者我想知道一种更好的方法来在部署时指定用户名和密码,而不要求密码以明文形式出现在部署清单中。

【问题讨论】:

    标签: sql-server deployment database-project vsdbcmd


    【解决方案1】:

    我也有同样的问题。您是否尝试设置实例名称?

    连接字符串中的SQL 实例名称可以是wrong

    如果您没有使用集成安全性,还要仔细检查是否设置了用户 ID 和密码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-08
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      • 2012-02-25
      • 1970-01-01
      相关资源
      最近更新 更多