Tsql T-SQL表名别名
在我的T-SQL脚本中,我多次引用相同的长表名。我在不同的表上使用这个查询Tsql T-SQL表名别名,tsql,variables,Tsql,Variables,在我的T-SQL脚本中,我多次引用相同的长表名。我在不同的表上使用这个查询 有没有办法通过变量引用表名?如果是这样的话,我可以简单地在顶部声明脚本将使用的一个变量,只需设置值,我就可以在不同的表上运行它,而无需对脚本进行更改。您可以为该表创建同义词,但显然您需要确保在脚本运行时没有人更改同义词的定义(并且没有并行调用脚本) 您是否在SSMS中运行这些命令?如果是,您可以设置sqlcmd模式(在“查询”菜单上)并使用 您可以这样做: Declare @TableName As nvarchar(m
有没有办法通过变量引用表名?如果是这样的话,我可以简单地在顶部声明脚本将使用的一个变量,只需设置值,我就可以在不同的表上运行它,而无需对脚本进行更改。您可以为该表创建同义词,但显然您需要确保在脚本运行时没有人更改同义词的定义(并且没有并行调用脚本) 您是否在SSMS中运行这些命令?如果是,您可以设置
sqlcmd
模式(在“查询”菜单上)并使用
您可以这样做:
Declare @TableName As nvarchar(max)
Declare @SQL AS nvarchar(max)
@TableName = 'longtablename'
@SQL = 'Select * From ' + @TableName
EXEC(@SQL)
有几个选择
在一条SQL语句中,您可以将表名别名如下:
SELECT *
FROM MySuperLongTableName T
WHERE T.SomeField=1
如果您需要跨多个脚本对大量语句执行此操作,那么同义词可能是更好的选择:
CREATE SYNONYM SuperT FOR dbo.MySuperLongTableName
动态SQL,啊!这有各种各样的副作用,OP可能不希望这些副作用与权限和重新编译查询计划有关。@JohnFx,他问了一个方法,说实话,如果你知道自己在做什么,Dynamix SQL没有任何问题。另外,如果你正在更改表,你无论如何都会遇到所有这些问题。我不能tch关于像变量一样切换表名的部分。在这种情况下,动态SQL可能是最好的选择。但是,我仍然说,使用它作为最后的手段。@JohnFx,我不是说它是最漂亮的方法,只是可能是最简单的方法。我同意你的意见(自从我上次发表评论以来)。不需要说服我。很好!但是,在我试图证明它确实有效时,我发现我需要在同义词和对象名称之间添加一个“for”关键字。如。没有“for”的情况下它对您有效吗?如果是,如何?
CREATE SYNONYM SuperT FOR dbo.MySuperLongTableName