【问题标题】:Unexpected stored procedure behaviour after database export数据库导出后的意外存储过程行为
【发布时间】:2016-03-21 13:29:30
【问题描述】:

我必须将 SQL Server 2008 R2 从托管在 Virtual Box VM 上的开发环境部署到全新的测试服务器。两台服务器都使用集成的 Windows 身份验证。

部分问题在于测试服务器使用 SQL Server 2008 (Express)。我已设法在 Access 数据库中导出架构创建脚本和原始数据,但这不是问题的主题:显然数据库已正确导入到目标环境中。

但是,当我启动依赖于导出数据库的网站时,我得到了一些在开发环境中运行时不会出现的错误。经过一番研究,我发现问题是由一个小存储过程引起的。

此存储过程会动态创建一个表,当不再需要时删除该表,其语法如下:

create table tmp_Codes (Code nvarchar(max))

当测试环境执行此语句时,测试环境有效地创建了表,但它附加了用户名,类似于:

dbo.[NT AUTHORITY\NETWORK SERVICE].tmp_Codes

后面的代码找不到新创建的表,对它的所有操作都失败了。

我会理解这种设计在某种程度上被破坏了,但是我从工作环境中继承了这一堆 SQL 脚本,我无法理解它是如何工作的

有什么想法吗?

【问题讨论】:

    标签: sql-server tsql stored-procedures sql-server-2008-r2


    【解决方案1】:

    CREATE TABLE #tmp_Codes(代码 nvarchar(max))

    【讨论】:

    • 但是这样创建的表会在创建它的过程之外继续存在吗?不幸的是,该表是在一个过程中创建的,然后放在另一个过程中。
    • 是的,但现有代码不会在创建它的同一过程中删除它。
    【解决方案2】:

    抱歉,这是一个非常微不足道的错误:用户 NT AUTHORITY\NETWORK SERVICE 将默认架构设置为其名称而不是 dbo。

    更改设置后,存储过程按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2015-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多