none
这是SQLSERVER2012的bug吗? RRS feed

  • 问题

  •  ;with t1 as (
      select 1 c1,2 c2,3 c3
      )
      Select  Concat( c1 , c2 , c3) from t1
     
     ;with t1 as (
      select 1 c1,2 c2,3 c3
      )
      Select  { fn Concat( c1 , c2 , c3)} from t1
      --Concat 函数要求有 2 个参数。
    上下2个sql语句,
    上面可以正常执行返回结果 123
    下面会报Concat 函数要求有 2 个参数。

    在创建视图的时候Concat( c1 , c2 , c3) 会被强制转换成 { fn Concat( c1 , c2 , c3)} 导致出现错误,无法保存。
    这是sqlserver2012的bug,还是我哪里没弄对?
    2013年7月17日 1:31

答案

  • 在SSMS中创建碰到跟你一样的问题,但是代码创建可以。应该是个BUG。

    Please Mark As Answer if it is helpful.

    • 已标记为答案 FLC2013 2013年7月17日 4:56
    2013年7月17日 2:17

全部回复

  • 您好,

    請問您說建立View時會錯誤嗎?

    我試了一下,不會有錯誤!

    IF object_id(N'view1', 'V') IS NOT NULL
    	DROP VIEW view1
    GO
    CREATE VIEW view1 AS
     with t1 as (
      select 1 c1,2 c2,3 c3
      )
      Select  Concat( c1 , c2 , c3) AS c123 from t1
    go
    
    SELECT * FROM dbo.view1;
    還是我有誤解呢?


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2013年7月17日 1:44
  •  create view vw_test
     as
     with t1 as (
      select 1 c1,2 c2,3 c3
      )
      Select  Concat( c1 , c2 , c3) as col from t1
     go
     select * from vw_test

    我的数据库是Microsoft SQL Server 2012 RC0 - 11.0.1750.32没有问题啊,可以正常创建VIEW,而且可以获得值,没有出现fn Concat。你的版本是多少?


    Please Mark As Answer if it is helpful.

    2013年7月17日 1:51
  • 这是我举得例子,只是证明加上{fn }会报错

    你在 sql server management studio 中找个数据库,

    对视图 点右键选 新建视图,

    然后随便拖几个表, 用CONCAT 把把几个列连接成一个新的列

    Select CONCAT(t1_c_1,t2_c_2) as new_c From Table1,Table2 where...
    
    --会变成
    
    Select {fn CONCAT(t1_c_1,t2_c_2)} as new_c From Table1,Table2 where...

    2013年7月17日 1:58
  • 不要sql语句创建,用视图里的那个新建视图来创建
    2013年7月17日 2:17
  • 在SSMS中创建碰到跟你一样的问题,但是代码创建可以。应该是个BUG。

    Please Mark As Answer if it is helpful.

    • 已标记为答案 FLC2013 2013年7月17日 4:56
    2013年7月17日 2:17
  • 在SSMS中创建碰到跟你一样的问题,但是代码创建可以。应该是个BUG。

    Please Mark As Answer if it is helpful.

    对的,用sql语句重建以后,想修改的时候还是得用sql语句修改。如果点击 设计 SSMS就会崩溃掉
    2013年7月17日 2:35
  • 测试后发现
    CONCAT 直接使用时没有任何问题。
    使用 {fn CONCAT()} 后问题超多。

    Select  CONCAT('a','b') 
    Select  CONCAT(1,'a') 
    Select  CONCAT('a','b','c')
    Select  CONCAT(1,2) 
    Select  CONCAT('a',NULL)
    --ab
    --1a
    --abc
    --12
    -a

    Select {fn CONCAT('a','b')} 
    Select {fn CONCAT(1,'a')} 
    Select {fn CONCAT('a','b','c')} 
    Select {fn CONCAT(1,2)} 
    Select {fn CONCAT('a',NULL)} 
    --ab
    --数据类型 int 和 varchar 在 concat 运算符中不兼容。
    --CONCAT 函数要求有 2 个参数。
    --操作数数据类型 int 对于 concat 运算符无效。
    --NULL


    使用sql语句 可以创建 直接用 CONCAT的视图
    但是无法用SSMS进行重新设计,一打开就崩溃

    用SSMS创建视图的时候会被强制转换为 {fn concat()}的形式

    真是恶心的bug

    2013年7月17日 2:58
  • select {fn CONCAT(1,'aa')}  这种情况确实会出现错误。 
    2013年7月17日 3:02
    版主