Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql T-SQL表名别名_Tsql_Variables - Fatal编程技术网

Tsql T-SQL表名别名

Tsql T-SQL表名别名,tsql,variables,Tsql,Variables,在我的T-SQL脚本中,我多次引用相同的长表名。我在不同的表上使用这个查询 有没有办法通过变量引用表名?如果是这样的话,我可以简单地在顶部声明脚本将使用的一个变量,只需设置值,我就可以在不同的表上运行它,而无需对脚本进行更改。您可以为该表创建同义词,但显然您需要确保在脚本运行时没有人更改同义词的定义(并且没有并行调用脚本) 您是否在SSMS中运行这些命令?如果是,您可以设置sqlcmd模式(在“查询”菜单上)并使用 您可以这样做: Declare @TableName As nvarchar(m

在我的T-SQL脚本中,我多次引用相同的长表名。我在不同的表上使用这个查询


有没有办法通过变量引用表名?如果是这样的话,我可以简单地在顶部声明脚本将使用的一个变量,只需设置值,我就可以在不同的表上运行它,而无需对脚本进行更改。

您可以为该表创建同义词,但显然您需要确保在脚本运行时没有人更改同义词的定义(并且没有并行调用脚本)

您是否在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