我在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
请帮助
答案 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