繁体   English   中英

脚本问题 Transact-SQL

[英]script issue Transact-SQL

我想从使用数据库中返回所有表名,但这只是返回一个字符

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

输出是 ssssss

declare @tableName varchar(100)

您需要定义@tableName 的长度,默认设置为1 个字符。

尝试declare @tableName varchar(100)

您需要更改表名以具有字符数的值。 目前该值默认为 1。 我会建议一个比您认为确保所有表格都适合该字段所需的值大得多的值。

declare @tableName varchar需要具有类似varchar(50)的大小

T-SQL 具有SYSNAME类型,用于存储诸如表名之类的内容:

sysname 数据类型用于存储对象名称的表列、变量和存储过程参数。 sysname 的确切定义与标识符规则有关。 因此,它可能因 SQL Server 实例而异。 sysname 在功能上与 nvarchar(128) 相同,但默认情况下,sysname 不是 NULL。 在 SQL Server 的早期版本中,sysname 被定义为 varchar(30)。

所以尝试像这样声明你的变量:

DECLARE @tableName SYSNAME;

如果表名包含当前代码页之外的字符或超过 100 个字符,则使用VARCHAR(100)声明(如其他答案中所建议的VARCHAR(100)将失败。

这段 SQL Server标识符规则的摘录描述了表名的形式:

  1. 第一个字符必须是以下字符之一:

    • Unicode 标准 3.2 定义的字母。 字母的 Unicode 定义包括从 a 到 z、从 A 到 Z 的拉丁字符,以及来自其他语言的字母字符。

    • 下划线 (_)、at 符号 (@) 或数字符号 (#)。

    • 标识符开头的某些符号在 SQL Server 中具有特殊含义。 以 at 符号开头的常规标识符始终表示局部变量或参数,不能用作任何其他类型对象的名称。 以数字符号开头的标识符表示临时表或过程。 以双数字符号 (##) 开头的标识符表示全局临时对象。 尽管可以使用数字符号或双数字符号字符作为其他类型对象的名称的开头,但我们不推荐这种做法。

    • 某些 Transact-SQL 函数的名称以双符号 (@@) 开头。 为避免与这些函数混淆,不应使用以@@ 开头的名称。

  2. 后续字符可以包括以下内容:

    • Unicode 标准 3.2 中定义的字母。

    • 来自基本拉丁文或其他国家文字的十进制数字。

    • at 符号、美元符号 ($)、数字符号或下划线。

  3. 标识符不能是 Transact-SQL 保留字。 SQL Server 保留保留字的大写和小写版本。

  4. 不允许嵌入空格或特殊字符。

  5. 不允许使用补充字符。

有关更多信息,请参阅我的答案中的文档链接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM