存储过程命名约定问题

时间:2013-09-17 15:31:57

标签: sql-server stored-procedures naming-conventions sql-server-2012

我们建立了一个新的SQL Server 2012.

每次创建存储过程时,存储过程的名称都会更改为开发人员所在的AD组名称和开发人员用户名。

造成这种情况的原因是什么?我们如何纠正它?

3 个答案:

答案 0 :(得分:4)

最简单,最安全的方法是使用模式加前缀,例如

CREATE PROCEDURE dbo.usp_myProc
AS ...

答案 1 :(得分:0)

您是否使用架构名称创建过程?

最有可能的是,你这样做:

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

答案 2 :(得分:0)

当用户在CREATE语句中创建没有模式名称的数据库对象时,它将在默认用户模式中创建。

有两种方法可以创建特定模式所拥有的对象。

1在CREATE语句中明确标识模式名称

CREATE PROC [MySchema]。[ProcName]

2设置默认用户架构并创建没有架构名称的数据库对象。

ALTER USER UserName WITH DEFAULT_SCHEMA = MySchema;

CREATE PROC [ProcName]