代码之家  ›  专栏  ›  技术社区  ›  erlando

为什么这个SQL CAST不起作用[[关闭]

  •  8
  • erlando  · 技术社区  · 15 年前

    nvarchar(50) SQL Server 2000表中的列定义如下:

    TaskID nvarchar(50) NULL
    

    我需要使用 NEWID() 函数(我无法将列类型更改为 uniqueidentifier ).

    我试过这个:

    UPDATE TaskData SET TaskID = CAST(NEWID() AS nvarchar)
    

    但我有以下错误:

    算术溢出错误转换

    我也试过:

    UPDATE TaskData SET TaskID = CAST(NEWID() AS nvarchar(50))
    

    但后来出现了一个错误:

    消息8152,级别16,状态6,行1

    我不明白为什么这不起作用,但这确实起作用了:

    DECLARE @TaskID nvarchar(50)
    SET @TaskID = CAST(NEW() AS nvarchar(50))
    

    我也试过了 CONVERT(nvarchar, NEWID()) CONVERT(nvarchar(50), NEWID())

    更新:

    好的,我的视力在下降,桌子上的列大小是 nvarchar(32)

    4 回复  |  直到 9 年前
        1
  •  13
  •   Robin Day    15 年前

    这个测试脚本对我来说很好。。。我只能说也许你的TaskId不是你说的NVARCHAR(50)?尝试一个sp\u列只是为了检查。。。

    CREATE Table #TaskData (TaskId NVARCHAR(50))
    INSERT INTO #TaskData (TaskId) SELECT CONVERT(NVARCHAR(50), NEWID())
    UPDATE #TaskData SET TaskId = CONVERT(NVARCHAR(50), NEWID())
    DROP TABLE #TaskData
    
        2
  •  18
  •   George Mastros    15 年前

    这两种方法都可以:

    Select Cast(NewId() as nvarchar(36)), CONVERT(nvarchar(36), NEWID())
    
        3
  •  4
  •   Arnkrishn    15 年前

    请尝试以下类型:

    CAST(NEWID() AS varchar(255))
    
        4
  •  0
  •   garik    15 年前

    使用varchar数据类型,nvarchar需要两倍大小