30多年来,我一直是一名多语言开发人员。由于其声明性质,我对tsql限制越来越感到沮丧。目前,我有一个函数,它返回一个数据类型作为varchar(n),并尝试将此数据类型作为字符串传递给xml值方法第二个参数作为参数(注意以前的帖子是为< strong>第一个参数,我尝试了 sql:variable(&#34; @ DatTyp&#34;))。我认为MS没有理由以这种方式实现查询方法。这是我的测试代码存根:
DECLARE @xmlHandle int
exec sp_xml_preparedocument @xmlHandle OUTPUT, @xmlTableSchema
Set @DatTyp = [GlobalCnlyCentralizedMedicaids].[dbo].[fnGetDataTypeFromXML]('EmailTo', @xmlHandle)
-- this line produces the error in the title of this question
set @emailRec = @xmlTableData.value('(/TableData/TableRow/@EmailTo)[1]',@DatTyp)
EXEC sp_xml_removedocument @xmlHandle
任何想法都将不胜感激。非常感谢提前!
答案 0 :(得分:0)
这是因为XML实际上并不存储为XML,而是更易于索引。尝试EXEC
使其表现出来。
DECLARE @sql NVARCHAR(8000) = '
DECLARE @xmlHandle int
exec sp_xml_preparedocument @xmlHandle OUTPUT, @xmlTableSchema
Set @DatTyp = [GlobalCnlyCentralizedMedicaids].[dbo].[fnGetDataTypeFromXML]('EmailTo', @xmlHandle)
set @emailRec = @xmlTableData.value(''(/TableData/TableRow/@EmailTo)[1]'',' + @DatTyp + ')
EXEC sp_xml_removedocument @xmlHandle'
EXEC (@sql)