0

我的任务是为 CS2009 清理 SQL Server 2008 中的一些数据。在我们的配置文件数据库中有两个表:

  1. 地址
  2. 用户对象

    地址:

    address_id, line1, line2 guid, varchar, varchar

    用户对象:

    userid_id、addressguids、acitivtydate guid、varchar、日期时间

我需要删除所有早于 X 的用户对象(即没有活动)。这显然不是问题。当我想删除属于那个人的地址时,我的问题就出现了。它们以连接方式存储在一个字段中。例如,如果用户有 2 个地址,它可能看起来像:

2;{guid1};{guid2}

第一个数字是 guid 的数量,全部用分号分隔。Address 表没有用于 user_id 的字段,无法将其绑定回来(非常烦人)。地址表中的唯一 ID 是地址 guid。

我的问题是如何在 SQL 中解决这个问题(我的 sql 有点差)。我想它会是这样的:

  • 选择所有活动日期 > X 的用户
  • 将地址 guid 字符串分开并获取每个 guid
  • 删除地址表中的每个 guid
  • 删除用户

我想删除地址可以是子字符串或删除初始数字和分号的东西,然后用逗号替换其余的分号并将其放入 when IN 子句中。

我不知道循环,最好的方法等等。

谢谢

4

2 回答 2

2

我认为分阶段进行:

首先为 user_address 建立一个新表。这应该有 user_id 和 address_guid 然后编写一个 proc 或循环将地址 guid 分解为这个新结构。

查询它并检查您是否正确。如果没有,请擦拭并重新开始。

完成后,使用它进行删除。应该简单得多。

于 2010-10-14T13:45:50.437 回答
0

If you don't want to do it using a new table, as previously answered (nothing wrong with that answer, by the way), then you could write a table-valued function that does some string manipulation and returns all the guids in your 'addressguids' field on a new row, with the userid.

Once you've done that, you could then use CROSS APPLY or OUTER APPLY to join the function as if it were a table as described in this technet article.

于 2010-10-14T13:57:35.437 回答