Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 更新特定日期之前的多行_Sql Server - Fatal编程技术网

Sql server 更新特定日期之前的多行

Sql server 更新特定日期之前的多行,sql-server,Sql Server,我正在使用一个对其业务层进行更新的网站,因此现在我需要转换旧数据以匹配新数据的保存方式。我正在编写一个SQL查询,用于更新成员表上的两个数据列,其中person_id在成员表和注册码表上匹配,注册码出现在注册码表上,注册码被标记为在注册码表的某个日期之前使用 UPDATE vs_member SET premium_acct = 1, tenant_reg_key = ( SELECT DISTINCT tenant_reg_key FROM vs_tenant_reg_key_tbl t W

我正在使用一个对其业务层进行更新的网站,因此现在我需要转换旧数据以匹配新数据的保存方式。我正在编写一个SQL查询,用于更新成员表上的两个数据列,其中person_id在成员表和注册码表上匹配,注册码出现在注册码表上,注册码被标记为在注册码表的某个日期之前使用

UPDATE vs_member
SET premium_acct = 1, tenant_reg_key = (
SELECT DISTINCT tenant_reg_key 
FROM vs_tenant_reg_key_tbl t
WHERE person_id = t.person_id)
WHERE person_id in (
SELECT t2.person_id
FROM vs_tenant_reg_key_tbl t2
WHERE person_id = t2.person_id AND t2.used = 1 AND premium_acct = 0 AND date_joined <= '2013-11-08')
我收到一个错误,声明如下:子查询返回的值超过1。当子查询在=、!=、=或者当子查询用作表达式时


不确定如何处理,请提供帮助。

检查查询的以下部分是否返回多个条目:

SELECT DISTINCT tenant_reg_key 
FROM vs_tenant_reg_key_tbl t
WHERE person_id = t.person_id
如果是这样,您将无法为此查询结果设置tenant\u reg\u key,因为它实际上是在尝试向一个条目添加多个值(请注意,一次)。

在您的子选择中,person\u id=t。person\u id可能没有按照您的想法进行操作

考虑使用联接而不是子选择来编写UPDATE语句。也许像这样的东西可以满足你的需要

UPDATE V
   SET premium_acct = 1, tenant_reg_key = T.tenant_reg_key
  FROM vs_member V
  INNER JOIN vs_tenant_reg_key_tbl T ON T.person_id = V.person_id
  WHERE T.used = 1 AND T.premium_acct = 0 AND T.date_joined < '2013-11-08'