【问题标题】:Facing error of "The default schema does not exist." when executing runtime query inside sp using exec()面临“默认架构不存在”的错误。使用 exec() 在 sp 内执行运行时查询时
【发布时间】:2015-09-15 02:22:53
【问题描述】:

我在 sp 中进行了运行时查询,并正在使用 exec() 在 sp 中执行查询,但是在创建 sp 时出现错误

The default schema does not exist.

SP 是:

CREATE PROCEDURE MySP
    @tableName varchar(100)

AS
BEGIN   
    SET NOCOUNT ON;

declare @selectQuery varchar(MAX)

set @selectQuery = 'select * from ' + @tableName

exec(@selectQuery)

end

请帮忙

【问题讨论】:

    标签: sql sql-server sql-server-2005


    【解决方案1】:

    使用CREATE PROCEDURE dbo.MySP

    您登录的用户必须具有不存在的默认架构。

    DEFAULT_SCHEMA can be set to a schema that does not currently exist in the database.

    您还应该使用quotename(@tableName)sysname 的参数类型而不是varchar(100) 以避免SQL 注入或非标准对象名称的错误。

    【讨论】:

    【解决方案2】:

    您可以更改默认架构:

    ALTER USER [YOURDOMAIN\HotTester] WITH DEFAULT_SCHEMA=[dbo]
    GO
    

    然后避免必须包含 [dbo]。在创建过程中

    【讨论】:

    • 谢谢。我在针对 azure 数据库运行脚本时遇到问题。我正在将 umbraco cms 安装到 azure 托管平台上,得到“默认架构不存在”...
    • 谢谢。我创建了一个用户,其数据库名称的 DEFAULT_SCHEMA 是我在其中创建它的数据库名称,但它必须是 [dbo]
    【解决方案3】:

    这可能是因为与创建 SP 的用户关联的默认架构不再存在,或者用户不再有权访问该架构。

    虽然,我认为 SQL Server 默认使用 dbo 架构。也许尝试限定存储过程的架构。

    例如

    Create Procedure dbo.MySP

    【讨论】:

    • @HotTester - 抱歉误读了您的问题。我已经更新了答案
    猜你喜欢
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    • 2021-10-11
    • 2018-01-24
    相关资源
    最近更新 更多