T-SQL 的类型SYSNAME用于存储诸如表名之类的内容:
sysname 数据类型用于存储对象名称的表列、变量和存储过程参数。sysname 的确切定义与标识符的规则有关。因此,它可能因 SQL Server 实例而异。sysname 在功能上与 nvarchar(128) 相同,只是默认情况下 sysname 不为 NULL。在 SQL Server 的早期版本中,sysname 定义为 varchar(30)。
所以尝试像这样声明你的变量:
DECLARE @tableName SYSNAME;
VARCHAR(100)
如果表名包含当前代码页之外的字符或超过 100 个字符,则使用声明(如其他答案中所建议)将失败。
SQL Server标识符规则的摘录描述了表名的形式:
第一个字符必须是以下之一:
Unicode 标准 3.2 定义的字母。字母的 Unicode 定义包括从 a 到 z、从 A 到 Z 的拉丁字符,以及来自其他语言的字母字符。
下划线 (_)、at 符号 (@) 或数字符号 (#)。
标识符开头的某些符号在 SQL Server 中具有特殊含义。以 at 符号开头的常规标识符始终表示局部变量或参数,不能用作任何其他类型对象的名称。以数字符号开头的标识符表示临时表或过程。以双数字符号 (##) 开头的标识符表示全局临时对象。尽管可以使用数字符号或双数字符号字符来开始其他类型对象的名称,但我们不推荐这种做法。
某些 Transact-SQL 函数的名称以双 at 符号 (@@) 开头。为避免与这些函数混淆,您不应使用以@@ 开头的名称。
后续字符可以包括以下内容:
Unicode 标准 3.2 中定义的字母。
来自基本拉丁文或其他国家文字的十进制数字。
at 符号、美元符号 ($)、数字符号或下划线。
标识符不能是 Transact-SQL 保留字。SQL Server 保留保留字的大写和小写版本。
不允许嵌入空格或特殊字符。
不允许使用补充字符。
有关更多信息,请参阅我的答案中的文档链接。