【问题标题】:Implicit conversion from data type xml to nvarchar is not allowed. Use the CONVERT function to run this query不允许从数据类型 xml 到 nvarchar 的隐式转换。使用 CONVERT 函数运行此查询
【发布时间】:2013-06-25 07:16:07
【问题描述】:

我正在编写以下 SQL 过程:

ALTER PROCEDURE [dbo].[spc_InsertSubjectToContentRelation]
(
    @pCourseGUID XML, 
    @pSubjectId XML,
    @pAssessmentIds XML,
    @pVideoIds XML
)
AS
BEGIN
SET NOCOUNT ON;

    DECLARE @CourseGUID NVARCHAR(50);
    DECLARE @SubjectId NVARCHAR(50);
    DECLARE @AssessmentIds NVARCHAR(MAX);
    DECLARE @VideoIds NVARCHAR(MAX);

    SET @CourseGUID = Convert(NVARCHAR,@pCourseGUID);
    SET @SubjectId = Convert(NVARCHAR,@pSubjectId);
    SET @AssessmentIds = Convert(NVARCHAR,@pAssessmentIds);
    SET @VideoIds = Convert(NVARCHAR,@pVideoIds);

    INSERT INTO SubjectToAssessmentAndVideoRelation VALUES (@pCourseGUID, @pAssessmentIds, @pAssessmentIds, @pVideoIds)
END

当我运行这个程序时,我收到了错误:

不允许从数据类型 xml 到 nvarchar 的隐式转换。使用 CONVERT 函数运行此查询。 我该如何解决这个问题?

【问题讨论】:

  • 如果这不是您的过程想要的类型,为什么要将参数声明为一种类型?
  • @Damien_The_Unbeliever 因为表中的列类型不是 xml 类型

标签: stored-procedures sql-server-2008-r2


【解决方案1】:

您运行转换,然后忽略转换后的值并继续使用原始参数值。你可能想要这个:

INSERT INTO SubjectToAssessmentAndVideoRelation VALUES (
     @CourseGUID, @AssessmentIds, @AssessmentIds, @VideoIds)

@后面没有p,因此使用局部变量而不是参数)

但我仍然感到困惑,为什么你声明你的过程需要 xml 参数,如果它会立即将它们转换为 nvarchars。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 2018-04-30
    相关资源
    最近更新 更多