sql-server - 存储过程中 DROP 和 SELECT INTO 的默认架构

标签 sql-server sql-server-2008 stored-procedures sql-server-2005

对于如何在 MS SQL Server 中确定默认数据库模式,我有点困惑。

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

CREATE PROCEDURE [dbo].[SampleSP]
AS

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

DROP TABLE [SampleTable]

所有测试都是在 MS SQL 服务器上使用用户 User 执行的,使用 Windows Auth 和同名的默认数据库架构。

  • 当我在 MS SQL Server 2005 安装(以兼容模式 80,即 Server 2000 运行)上执行此 SP 时,表创建为 [User].[SampleTable]DROP TABLE Invalid object name 'SampleTable' 而失败(我假设是因为它查找 [dbo].[SampleTable])
  • 当我在单独的查询中 DROP TABLE [SampleTable] 时,它确实有效
  • 当我在 MS SQL Server 2008 R2(也在 compat.80 中运行)上执行 SP 时,表被创建为 [dbo].[SampleTable] 并且没有错误地被删除

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

最佳答案

听起来您只需要将用户的默认架构设置为 dbo:

ALTER USER YourUser WITH DEFAULT_SCHEMA = dbo;

这样它是在用户级别设置的,您不需要更改任何代码。

关于sql-server - 存储过程中 DROP 和 SELECT INTO 的默认架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32742689/

相关文章:

sql-server - TransactionScope 和函数范围 - 这些连接是否在范围内?

sql - 连续3个月发生的TSQL查找顺序

mysql - 数据库如何在 B-Tree/B+Tree 内部存储数据

sql - 每个查询的最大内存

asp.net - 推荐的下载远程SQL Server数据库的方法

mysql - 存储过程中的 MySQL 临时表与服务器的一次连接的最佳方法

sql-server - SQL CONSTRAINT 不同的名称

sql - 连接两个表时计算不同的计数

sql - 遍历 XML 节点并在 SQL Server 中发送电子邮件

oracle - PL/SQL过程错误:(OBJECT IS INVALID) [closed]