面临“默认架构不存在”的错误。使用exec()在sp内执行运行时查询时

时间:2010-09-17 08:10:24

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

我在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

请帮助

3 个答案:

答案 0 :(得分:16)

使用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注入或只是来自非标准对象名称的错误。

答案 1 :(得分:7)

您可以更改默认架构:

{{1}}

然后避免包括[dbo]。在CREATE PROCEDURE中

答案 2 :(得分:2)

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

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

e.g

Create Procedure dbo.MySP