对于如何在 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/