我的任务是清理SQL Server 2008 for CS2009中的一些数据。在我们的配置文件数据库中有两个表:
UserObject
地址:
address_id,line1,line2 guid,varchar,varchar
UserObject:
userid_id,addressguids,acitivtydate guid,varchar,datetime
我需要删除所有早于X的UserObject(即没有活动)。这显然不是问题。当我想删除属于该人的地址时,我的问题就来了。它们以连续的方式存储在一个字段中。例如,如果用户有2个地址,它可能看起来像:
2;{guid1};{guid2}
第一个数字是指数,全部由半冒号分隔。 Address表没有user_id可以将其绑定的字段(非常烦人)。地址表中唯一的ID是地址guid。
我的问题是如何在SQL中对此进行排序,(我的sql有点差)。我想它会是这样的:
我想删除地址可以使用子字符串或其他东西来删除初始数字和分号然后用逗号替换其余的半冒号并将其放入when IN子句中。
我对循环,最好的方法等没有任何线索。
由于
答案 0 :(得分:2)
我认为分阶段进行:
首先为user_address构建一个新表。这应该有user_id和address_guid 然后编写一个proc或循环来将地址guid分解为这个新结构。
查询并检查你是否正确。如果你没有擦拭它并重新开始。
完成后,使用它来执行删除操作。应该简单得多。
答案 1 :(得分:0)
如果您不想使用新表,如前所述(顺便说一句,答案没有错),那么您可以编写一个表值函数来执行一些字符串操作并返回所有使用userid在新行上的'addressguids'字段中指示。
完成后,您可以使用CROSS APPLY或OUTER APPLY加入该函数,就像它是一个表as described in this technet article一样。