我想从使用数据库返回所有表名,但这只返回一个char
declare @contador int
set @contador = 1
while (@contador<=(select count(table_name) from INFORMATION_SCHEMA.TABLES))
begin
declare @tableName varchar
set @tableName = (select top 1 * from (select top(@contador) table_name from INFORMATION_SCHEMA.TABLES order by table_name asc) as nombre order by table_name desc)
print @tableName
set @contador = @contador + 1
end
输出为s 小号 小号 小号 小号 小号
答案 0 :(得分:3)
declare @tableName varchar(100)
您需要定义@tableName的长度,默认情况下它设置为1个字符。
答案 1 :(得分:1)
试
declare @tableName varchar(100)
答案 2 :(得分:1)
您需要更改您的tablename以获得字符数的值。目前该值默认为一。我建议你提供一个比你想象的更大的价值,以确保所有的桌子都适合在场地内。
答案 3 :(得分:1)
declare @tableName varchar
的大小需要varchar(50)
答案 4 :(得分:1)
T-SQL的类型为SYSNAME,用于存储表名等内容:
sysname数据类型用于表列,变量和存储 存储对象名称的过程参数。确切的定义 sysname与标识符规则相关。因此,它可以 因SQL Server实例而异。 sysname在功能上是相同的 as nvarchar(128),但默认情况下,sysname为NOT NULL。在 在早期版本的SQL Server中,sysname被定义为varchar(30)。
所以尝试像这样声明你的变量:
DECLARE @tableName SYSNAME;
如果表名包含当前代码页以外的字符或超过100个字符,则使用其他答案中建议的VARCHAR(100)
声明将失败。
SQL Server的rules for identifiers摘录描述了表名的形式:
第一个字符必须是以下之一:
Unicode标准3.2定义的字母。 Unicode 字母的定义包括从a到z的拉丁字符 A到Z,还有其他语言的字母。
下划线(_),符号(@)或数字符号(#)。
标识符开头的某些符号具有特殊含义 在SQL Server中。以at符号开头的常规标识符 always表示局部变量或参数,不能用作 任何其他类型对象的名称。以a开头的标识符 数字符号表示临时表或程序。一个标识符 以双数字符号开头(##)表示全局临时符号 宾语。虽然数字符号或双数字符号可以 用于开始其他类型对象的名称,我们没有 推荐这种做法。
某些Transact-SQL函数的名称以符号开头为double (@@)。为避免与这些功能混淆,您不应该使用 以@@开头的名字。
后续字符可包含以下内容:
Unicode标准3.2中定义的字母。
来自Basic Latin或其他国家/地区脚本的十进制数字。
at符号,美元符号($),数字符号或下划线。
标识符不能是Transact-SQL保留字。 SQL Server 保留保留字的大写和小写版本。
不允许使用嵌入空格或特殊字符。
- 醇>
不允许使用补充字符。
有关详细信息,请参阅我的答案中的文档链接。