将存储在XML中的值转换为SQL Server 2005中的ntext和date类型

时间:2009-08-10 22:19:17

标签: xml sql-server-2005 stored-procedures

我正在处理日历应用程序的存储过程。日历中的每个事件都可以有多个日期。此信息存储在两个不同的表中。而不是编写两个存储过程并多次调用第二个存储过程以保存日期,我宁愿只使用XML传递它们。麻烦的是我想将一些值转换为日期类型,其中一个转换为ntext类型。

这是我到目前为止的一个简单示例:

declare @samplexml as xml
set @samplexml = '<root><scheduleRow><dateBegin>4/5/2009</dateBegin><dateEnd>4/6/2009</dateEnd><timeBegin>1:00 pm</timeBegin><timeEnd>2:00 pm</timeEnd><location>Sheas House</location></scheduleRow><scheduleRow><dateBegin>5/5/2009</dateBegin><dateEnd>5/6/2009</dateEnd><timeBegin>2:00 pm</timeBegin><timeEnd>3:00 pm</timeEnd><location>Metro Buffet</location></scheduleRow></root>'

select x.scheduleRow.value('./dateBegin[1]','varchar(20)') as date_begin,
       x.scheduleRow.value('./dateEnd[1]','varchar(20)')   as date_end,
       x.scheduleRow.value('./timeBegin[1]','varchar(20)') as time_begin,
       x.scheduleRow.value('./timeEnd[1]','varchar(20)')   as time_end,
       x.scheduleRow.value('./location[1]','ntext')        as location
  from @samplexml.nodes('/root/scheduleRow') as x(scheduleRow) 

如果您尝试运行此操作,则会收到此错误:

Msg 9500,Level 16,State 1,Line 4 VALUE方法中使用的数据类型'ntext'无效。

我在这里做错了什么?有什么办法可以做我想要的吗?

1 个答案:

答案 0 :(得分:3)

不要将TEXT,NTEXT和IMAGE类型用于任何新开发。它们是deprecated,将在SQL的未来版本中删除。即使从SQL 2k5开始,它们也不再支持任何新功能,例如点XML方法。

改为使用VARCHAR(MAX),NVARCHAR(MAX)和VARBINARY(MAX)。