我正在尝试将一堆字段从一个表移动到同一个表中包含的一个 xml blob。成功后,我将从表中删除该列。下面是我想出的一个非常简单的版本(没有 drop 列),这在 SQL 2008 上运行良好 - 但是我发现这在 SQL 2005 上不起作用。我得到了XQuery: SQL type 'datetime' is not supported in XQuery.
错误由于字段的数量,实际上是通过在 SP 中执行构造的 SQL 语句来执行此操作的,但为简单起见,我在示例中使用了普通语句:
if OBJECT_ID('tempdb..#Case') is not null
DROP Table #Case;
CREATE TABLE #Case
(
id INT,
DecisionDate DateTime,
CaseBlob xml
)
INSERT INTO #Case Values(1, '10-OCT-2011 10:10:00', '<CaseBlob></CaseBlob>')
INSERT INTO #Case Values(2, '20-OCT-2011 10:10:00', '<CaseBlob></CaseBlob>')
INSERT INTO #Case Values(3, null, '<CaseBlob></CaseBlob>')
INSERT INTO #Case Values(4, '21-OCT-2011 10:10:00', '<CaseBlob></CaseBlob>')
INSERT INTO #Case Values(5, null, '<CaseBlob></CaseBlob>')
UPDATE #Case
SET CaseBlob.modify('insert <DecisionDate>{sql:column("#Case.DecisionDate")}</DecisionDate>
as last into (/CaseBlob)[1]')
WHERE #Case.DecisionDate is not null
AND CaseBlob.exist('(/CaseBlob/DecisionDate)') = 0
SELECT * FROM #CASE
我试过用 with 包装sql:column("#Case.DecisionDate")
,xs:string(sql:column("#Case.DecisionDate"))
但这似乎没有帮助。@marc_s 已经指出,直到 SQL 2008 才引入sql:column(
在语句中的使用 - 所以我认为这是一个红鲱鱼。.modify(insert
由于这是一个一次性的迁移脚本并且只需要运行一次,我是否认为我应该离开 Set 方法并转向程序循环方法以满足我的要求。由于服务器版本的限制以及我想要实现的目标,这听起来像是正确的方法吗?任何指针都非常感谢。