【问题标题】:Declare a variable and then set to a data type?声明一个变量然后设置一个数据类型?
【发布时间】:2018-04-28 20:49:30
【问题描述】:

意外的 DBA,在这里。我正在查看一个已离开公司的前 DBA 编写的查询,我注意到一些我认为很奇怪的事情;也许我只是无知。 SQL 用于收集有关数据库的信息并提供超链接和文件位置。它使用一个变量。下面是有问题的代码,它是查询的开始。

 declare @crlf varchar(2)
 set @crlf = char(13)+char(10)

所以,对我来说,看起来变量被声明为 varchar,但随后被设置为两个 char 数据类型的串联?这让我很困惑,因为:

A) 为什么他不将变量设置为他想要开始的数据类型? B)我没有意识到您可以将变量设置为数据类型而不是值 C)我也不知道您可以将数据类型连接在一起(或者在这种情况下添加,也许?)。这对我来说毫无意义。

对此有何见解?

【问题讨论】:

  • A) 因为他真的不知道自己在做什么。 B)有一个数据优先文档,它解释了这种转换是如何工作的。 C) CHAR(n) 函数返回单个字符作为结果,它不是“连接数据类型”
  • 是的,你完全正确。我只是假设 char(n) 是固定长度的数据类型,而 varchar 不是。谢谢!

标签: sql-server-2008 tsql ssms


【解决方案1】:

他只是将其设置为回车符 (CR) 和换行符 (LF),因此变量名称为 crlf。您可以使用相同的方法将其设置为两个字母...

 declare @crlf varchar(2)
 set @crlf = char(88)+char(89)

 select @crlf

结果

XY

正如 cmets 中所指出的,这是调用 CHAR() 函数而不是分配一个字符串字面量的数据类型。相反的是ASCII() 函数。

Reference ASCII Table

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 2021-09-28
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多