【问题标题】:Update Table Set Column SQL Server更新表集列 SQL Server
【发布时间】:2012-09-10 21:02:24
【问题描述】:

我正在尝试运行下面的代码,但我不断收到此错误:

消息 512,第 16 级,状态 1,第 1 行 子查询返回超过 1 个 价值。当子查询跟随 =、!=、>、>= 或子查询用作表达式时,这是不允许的。声明已终止。

我正在尝试创建一个字段来识别个人用户。有什么建议吗?

UPDATE dbo.AAASTA_CONTACT
SET dbo.AAASTA_CONTACT.ALIAS_KEY =
(SELECT(SUBSTRING(COALESCE(CAST(ADDR.ADDR_ZIPCODE AS NCHAR(5)), '     ') 
        + COALESCE(CAST(UPPER(CON2.CON_LAST_NAME)AS NCHAR(5)), '     ') 
        + COALESCE(CAST(UPPER(CON2.CON_FST_NAME)AS NCHAR(5)), '     ') 
        + COALESCE(CAST(UPPER(ADDR.ADDR_ADDR_NAME) AS NCHAR(5)), '     '),1,20))
FROM dbo.AAASTA_CONTACT CON2
JOIN dbo.AAASTA_ADDR_PER ADDR
ON (CON2.CON_PERSON_UID = ADDR.T_ADDR_PER_PER_ID))

【问题讨论】:

  • 听起来你的内部 SELECT 语句(它定义了你想要设置 ALIAS_KEY 的值)返回多个值。 ALIAS_KEY 应设置为以下哪个值?
  • 我只要求一个子字符串。如果我将其作为选择而不是 SET 运行,它会返回一列信息。
  • 问题是查询分析器已经推断出该查询有返回多个结果的potential
  • 哈哈好吧,那它应该知道我的意图而不是我行动的可能性!感谢您的逻辑帮助!

标签: sql sql-server sql-update


【解决方案1】:

我认为这就是您要寻找的。它将使用正确的值更新每一行:

UPDATE 
    dbo.AAASTA_CONTACT
SET 
    dbo.AAASTA_CONTACT.ALIAS_KEY = SUBSTRING(COALESCE(CAST(ADDR.ADDR_ZIPCODE AS NCHAR(5)), '     ') + COALESCE(CAST(UPPER(CON2.CON_LAST_NAME)AS NCHAR(5)), '     ')  + COALESCE(CAST(UPPER(CON2.CON_FST_NAME)AS NCHAR(5)), '     ') + COALESCE(CAST(UPPER(ADDR.ADDR_ADDR_NAME) AS NCHAR(5)), '     '),1,20)
FROM 
    dbo.AAASTA_CONTACT CON2
JOIN 
    dbo.AAASTA_ADDR_PER ADDR
    ON (CON2.CON_PERSON_UID = ADDR.T_ADDR_PER_PER_ID)

【讨论】:

  • 啊,就是这样。猜猜我的想法只是关于如何正确地做这件事。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2016-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多