3

我对如何在MS SQL服务器中确定默认数据库架构感到困惑。存储过程中DROP和SELECT INTO的默认架构

我有以下存储过程作为一个最小工作示例:

CREATE PROCEDURE [dbo].[SampleSP] 
AS 

SELECT 'HI' as [SampleColumn] 
INTO [SampleTable] 

DROP TABLE [SampleTable] 

所有测试使用的是用户使用User验证的Windows具有相同名称的默认数据库架构MS SQL服务器上执行。

  • 当我执行的MS SQL Server 2005安装该SP表创建为[User].[SampleTable]DROP TABLE失败Invalid object name 'SampleTable'(在兼容模式下80,即Server 2000中运行)(我假设,因为它看起来[dbo].[SampleTable]
  • 当我DROP TABLE [SampleTable]在一个单独的查询它的工作
  • 当我执行的MS SQL Server 2008 R2(也运行在COMPAT。80)表被创建为[dbo].[SampleTable]和下跌没有错误的SP

我发现this回答描述存储过程中的查找,但它没有提及该上下文中的用户默认值,即使它在2005年使用。也许有人知道这是如何更改以及是否可以将新版本配置为表现方式相同。

+3

节省你自己的麻烦,并养成在程序和其他t-sql代码中始终使用模式的习惯。从长远来看,这将为您节省很多问题。 –

+0

我和你一直在使用模式。但是我目前正在迁移一些遗留代码,并试图衡量一些旧存储过程的行为变化的(非)影响。 – Oliver

回答

0

这听起来像你只需要为用户的默认架构设置为DBO:

ALTER USER YourUser WITH DEFAULT_SCHEMA = dbo; 

这样,它被设置在用户级别,你将不需要改变任何代码。