我们安装了新的SQL server 2012。
每次创建存储过程时,存储过程的名称都会更改为开发人员所在的AD组名称和开发人员用户名。
是什么导致了这种情况,我们如何纠正它?
发布于 2013-09-17 23:41:11
最简单、最安全的方法是在前缀加上模式,例如
CREATE PROCEDURE dbo.usp_myProc
AS ...发布于 2013-09-17 23:39:35
您是否正在使用架构名称创建过程?
最有可能的是,您正在执行以下操作:
CREATE PROCEDURE [uspMyProcedure]至少,你应该这样做:
CREATE PROCEDURE [dbo].[uspMyProcedure]下面是一个小示例,展示了使用模式名称命名的功能。
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[uspGetVersion]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[uspGetVersion]
GO
CREATE PROCEDURE [dbo].[uspGetVersion]
AS
SET NOCOUNT ON
SELECT 'dbo Version : ' + @@VERSION
SET NOCOUNT OFF
GO
EXEC [dbo].[uspGetVersion]
GO
if not exists(select 1 from information_schema.schemata where schema_name='LookupSchema')
BEGIN
print 'Creating the schema : [LookupSchema]'
EXEC ('CREATE SCHEMA [LookupSchema] AUTHORIZATION dbo;')
END
if exists(select 1 from information_schema.schemata where schema_name='LookupSchema')
BEGIN
print 'Schema Exists : [LookupSchema]'
END
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[LookupSchema].[uspGetVersion]') AND type in (N'P', N'PC'))
DROP PROCEDURE [LookupSchema].[uspGetVersion]
GO
CREATE PROCEDURE [LookupSchema].[uspGetVersion]
AS
SET NOCOUNT ON
SELECT 'LookupSchema Version : ' + @@VERSION
SET NOCOUNT OFF
GO
GRANT EXECUTE ON [LookupSchema].[uspGetVersion] TO [public]
go
EXEC [LookupSchema].[uspGetVersion]
GO发布于 2013-09-18 00:37:16
当用户在CREATE语句中创建没有模式名的数据库对象时,它将在默认的用户模式中创建。
有两种方法可以创建特定模式所拥有的对象。
1显式标识CREATE语句中的架构名称
创建过程MySchema.ProcName
2设置默认用户模式并创建不带模式名称的数据库对象。
用DEFAULT_SCHEMA =MySchema修改用户UserName;
创建过程ProcName
https://stackoverflow.com/questions/18853991
复制相似问题