Hot*_*ter 9 sql sql-server sql-server-2005
我已经在sp内部进行了运行时查询,并使用exec()在sp中进行了查询,但在创建sp时我得到了错误
The default schema does not exist.
Run Code Online (Sandbox Code Playgroud)
SP是:
CREATE PROCEDURE MySP
@tableName varchar(100)
AS
BEGIN
SET NOCOUNT ON;
declare @selectQuery varchar(MAX)
set @selectQuery = 'select * from ' + @tableName
exec(@selectQuery)
end
Run Code Online (Sandbox Code Playgroud)
善意的帮助
Mar*_*ith 16
使用 CREATE PROCEDURE dbo.MySP
您登录的用户必须具有不存在的默认架构.
DEFAULT_SCHEMA可以设置为数据库中当前不存在的模式.
此外,您应该使用quotename(@tableName)和参数类型sysname而不是varchar(100)避免SQL注入或只是非标准对象名称的错误.
您可以更改默认架构:
ALTER USER [YOURDOMAIN\HotTester] WITH DEFAULT_SCHEMA=[dbo]
GO
Run Code Online (Sandbox Code Playgroud)
然后避免包括[dbo].在CREATE PROCEDURE中
这可能是因为与创建 SP 的用户关联的默认架构不再存在,或者用户不再有权访问该架构。
虽然,我认为 SQL Server 默认使用该dbo架构。也许尝试限定存储过程的模式。
例如
Create Procedure dbo.MySP