用常量宏替换varchar长度

时间:2016-01-06 01:56:44

标签: sql-server sql-server-2008-r2

通常我们会像这样在SQL Server中定义varchar。

在存储过程中,输入变量@name将声明为

@name varchar(32);

然而,“32”是硬编码的。其他开发人员会在其他一些商店程序中使用24,64或其他东西。

很难维持。

有没有办法像这样写?

@name varchar(VAR_NAME_LENGTH);

VAR_NAME_LENGTH在全球某处定义,如C

#define VAR_NAME_LENGTH 32

然后所有开发人员都可以坚持使用这个宏而不是硬代码32。

不确定这是否可以在SQL Server中使用。

还是其他好主意?

注意:SQL Server版本是2008 SP2。

1 个答案:

答案 0 :(得分:0)

可以使用user-defined data types。但是,在实践中它并没有那么有用,因为你不能轻易改变自定义类型的定义。

有关详细信息,请参阅Aaron Bertrand撰写的文章Bad habits to kick : using alias types

在那篇文章的评论中,亚历山大库兹涅佐夫说:

  

实际上,我们非常需要能够定义一次类型并使用它   多次。为此,我使用宏并运行标准C ++   对我所有的SQL代码进行预处理以扩展它们。

     

例如,要转换我用于定义的包含文件

#define MAX_VARCHAR VARCHAR(8000)
     

在我的代码中,我可以在我的系统上写下这个:

[Comments] MAX_VARCHAR,
     

将扩展为

[Comments] VARCHAR(8000),
     

转换为2005年,我将宏替换为:

#define MAX_VARCHAR VARCHAR(MAX)
     

让SQL Compare处理所有细节。

因此,如果您已将所有数据库对象编写为脚本(在任何情况下都很好),那么在运行最终的T-SQL脚本来创建数据库之前,需要运行预处理器的额外步骤。 / p>