【问题标题】:MS SQL Server View not allowing CONCATMS SQL Server 视图不允许 CONCAT
【发布时间】:2020-06-15 23:29:21
【问题描述】:

MS SQL Server 2014。

我有一条运行良好的 SQL 语句:

SELECT CONCAT (
        CAST(T1.[F1] AS INTEGER),
        CAST(T1.[F2] AS INTEGER)
        ) AS F3 
FROM mytable AS T1

如果我把它放到一个视图中,并尝试运行我会收到错误:

Operand data type int is invalid for concat operator

F1 和 F2 都包含小数,但我希望它们连接起来,例如:

F1 = 123.00000
F2 = 456.00000

因此F3 = 123456

为什么视图不允许这样做,有解决办法吗?

【问题讨论】:

  • 如果您想将它们视为字符串,为什么要告诉CAST 将它们转换为整数
  • @Damien_The_Unbeliever 还有什么可能?
  • 能否分享一下视图脚本,因为 CONCAT 运算符隐含地将参数转换为字符串。
  • @ZoharPeled 把它放在 SSMS 的一个视图中然后执行它,它会失败。

标签: sql-server tsql view casting concat


【解决方案1】:

不要使用视觉设计师。

他们是buggy,在这种情况下转换

    SELECT CONCAT (
        CAST(T1.[F1] AS INTEGER),
        CAST(T1.[F2] AS INTEGER)
        ) AS F3 
FROM mytable AS T1

SELECT { fn CONCAT(CAST(T1.F1 AS INTEGER), CAST(T1.F2 AS INTEGER)) } AS F3
FROM     mytable AS T1

调用高度受限的ODBC escape sequence version of the function(只接受两个必须是字符串的参数)

只需使用标准的新查询窗口来执行您的CREATE VIEW/ALTER VIEW/SELECT FROM 操作,您就不会遇到此问题。

【讨论】:

  • 你认为微软会解决这个问题
  • 自 2005 年以来,他们似乎对视觉设计师的投入为零。如果他们不修改您的代码,那么一旦您添加诸如 ROW_NUMBER 之类的结构,它们就会变得毫无用处
  • 耻辱。 #bloatware
【解决方案2】:

请使用如下的 concat 函数

SELECT {fn CONCAT('123', '456') }

【讨论】:

  • 在 SQL Server >= 2012 的版本中,根本不需要使用fn CONCAT。它有自己的CONCAT功能,非常优越
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-29
  • 2014-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多