存储过程中的SQL SERVER表别名

时间:2011-10-23 03:09:07

标签: sql stored-procedures

是否有办法为表提供别名,然后在存储过程中引用该表。

Declare @target= (sometalbewithveryverylonganduglyname)
Declare @source= (anothertablewithaveryuglyverylongverybadname)

Select * from @target

Insert into @target select from @source

delete from @source

原因是,表源和目标可能会发生变化(如果更改了表名,那么我们只需更改一个位置),以提高可读性。

3 个答案:

答案 0 :(得分:0)

在T-SQL中你不能这样做:

Select * from @target

除非将@target定义为表变量,否则需要先将表设置为用户定义的类型。如果您尝试将物理表的名称分配给变量并以这种方式访问​​它,则需要使用动态SQL执行该语句。

exec ('Select * from @target')

如果您只想对表格进行别名,可以像这样编写查询:

Select * from sometalbewithveryverylonganduglyname AS t

从您的问题来看,表名可能会发生变化,因此您最终需要使用动态SQL。

答案 1 :(得分:0)

除非你像Yuck建议的那样使用动态SQL,否则你无法做你所描述的内容,但是为了不写长表名而这样做并不是一个有效的理由。 SSMS已包含智能感知,对于SQL Server 2005及更低版本,您可以使用许多free tools out there中的一个。这应该减少你需要做的输入量以及错误拼写错误。

此外,您始终可以select t.column1 from really_long_and_ugly_name t ...

答案 2 :(得分:0)

选项1)在这种情况下,您不想使用存储过程,使用一些ORM库,它将允许您在具有相同结构的不同表名之间切换非常容易

选项2)使用视图,这就是它们的用途,隐藏基础表并允许这些类型的更改