【问题标题】:INSERT INTO SELECT - shrink 2 columns in oneINSERT INTO SELECT - 将 2 列缩小为一列
【发布时间】:2014-01-05 14:00:31
【问题描述】:

我正在尝试将两列 - noteappdbo.UCAST3$ 缩小到列 klient.appendix

这就是我尝试用小注释缩小 2 列的方法:[note] + ' appendix: ' + [app]

我尝试了以下操作:

INSERT INTO dbo.klient
  (name, surname, rodcis, nopass, street, zip, city, appendix, tel, fax, titul, akce, rocnik)
  SELECT 
     [nameorig], [surnameorig], [rodcisorig], [nopassorig], [adresa], [ZIP], [place],
     [note] + ' appendix: ' + [app], [telhome], [telwork], titul, '000000-00', 2014 
  FROM dbo.UCAST3$

我收到以下错误:

将数据类型 varchar 转换为数值时出错。

它似乎正在跳到下一列nopassorig,它是数字。

谁能帮我解决这个问题?

  • [note]decimal(30,0)
  • [app]nvarchar(255)

【问题讨论】:

  • 答案取决于你的数据库引擎和三列的数据类型。
  • 您好,感谢您的帮助:[note] is decimal(30,0) [app] is nvarchar(255)and SQL Server 2008

标签: sql sql-server-2008


【解决方案1】:

永远,永远,永远不要在一列中存储多个值!

请不要这样做。如果您想在 SQL 中再次分隔值,这将是一个痛苦和缓慢的过程。

只需将 SQL 选择语句中的值连接到您需要的位置即可。

【讨论】:

    【解决方案2】:

    您需要将 [note] 转换为 varchar 才能成功连接。

    INSERT INTO dbo.klient
    (name, surname,rodcis,nopass,street,zip,city,appendix,tel,fax,titul,akce,rocnik)
    SELECT [nameorig], [surnameorig],[rodcisorig],
           [nopassorig],[adresa],[ZIP],[place],
           CAST([note] as VARCHAR(30)) + ' appendix: ' + [app],
           [telhome],[telwork],titul,'000000-00',2014
     FROM dbo.UCAST3$
    

    【讨论】:

    • @marc_s no marc sir 我不知道 CASE 语句中的默认长度,在数据定义中为 1,在 CAST 和转换函数中为 30。
    猜你喜欢
    • 2019-03-14
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 2010-12-19
    • 2012-01-08
    • 2023-02-09
    相关资源
    最近更新 更多