“如何克服”;无法提取文本、ntext和图像变量。”;在SQL Server上?

“如何克服”;无法提取文本、ntext和图像变量。”;在SQL Server上?,sql,sql-server,text,cursor,Sql,Sql Server,Text,Cursor,我收到以下错误消息: Msg 16927,级别16,状态1,过程GetWfGenProcessParameters,第21行 无法获取文本、ntext和图像变量 我真的需要让这个光标处理文本数据。 有没有办法克服这个错误?首先,为什么要使用游标,无论如何都要避免游标。如果你使用基于集合的解决方案,也许你的问题会消失。然而,如果没有更多关于您在游标中尝试做什么的想法,就很难提供建议。当然,我无法改变SQL Server不允许将文本数据放入变量的事实。当您遇到系统限制时,您需要重新思考您正在做什么以

我收到以下错误消息: Msg 16927,级别16,状态1,过程GetWfGenProcessParameters,第21行 无法获取文本、ntext和图像变量

我真的需要让这个光标处理文本数据。
有没有办法克服这个错误?

首先,为什么要使用游标,无论如何都要避免游标。如果你使用基于集合的解决方案,也许你的问题会消失。然而,如果没有更多关于您在游标中尝试做什么的想法,就很难提供建议。当然,我无法改变SQL Server不允许将文本数据放入变量的事实。当您遇到系统限制时,您需要重新思考您正在做什么以及如何做。

首先,为什么要使用游标,要不惜一切代价避免游标。如果你使用基于集合的解决方案,也许你的问题会消失。然而,如果没有更多关于您在游标中尝试做什么的想法,就很难提供建议。当然,我无法改变SQL Server不允许将文本数据放入变量的事实。当您遇到系统限制时,需要重新考虑您正在做什么以及如何做。

如果您使用的是
SQL Server 2005
,则可以使用
NVARCHAR(MAX)


如果您使用的是
SQL Server 2005
,则可以使用
NVARCHAR(MAX)


您需要强制转换为varchar,如果它真的很长,则可能会丢失文本。您需要强制转换为varchar,如果它真的很长,则可能会丢失文本。我正在处理一些存储为NTEXT的XML字段。我需要一个NTEXT变量来处理sp_xml_preparedocument,而不必修改xml。不应该“不惜一切代价”避免使用游标。有时,当光标方便时,您需要使用光标,这样可以节省大量的开发时间或数据迁移时间。有时我需要执行一次存储过程来完成一些事情,其中游标是完成它的最快方法。只有在成本不是问题的情况下,才说应该不惜一切代价避免它们,但对我和我所做的事情来说,这节省了很多时间,让我更有效率。话虽如此,我同意应该尽量避免使用光标。。。但并非不惜一切代价。@bunggo,使用游标来节省开发时间是一种非常糟糕的做法。数据库时间远比开发时间宝贵。是的,有时会使用游标,但实际上,除了有经验的dba之外,不应该使用游标,应用程序开发人员也不应该使用游标,因为他们太懒或太笨,无法学习如何正确地操作。顺便说一句,基于集合的解决方案通常更短,开发时间更短。数据库时间并不总是比开发时间更有价值。也许对你来说是,但对我来说不是。很多时候,我的客户只想从他们的数据库中挖掘一次数据,而不关心如何进行。有时候我能做的最快的方法就是用光标。有了最后期限和成本上限,有时即使不能让客户满意,也必须这样做。我同意你所说的作为指导方针,但不是作为规则。作为一名应用程序开发人员(和DBA),我们需要使用可用的工具来最好地解决问题,有时这是一个游标。一旦你知道你在做什么,游标实际上需要比基于集合的代码更长的时间来编写。我正在处理一些存储为NTEXT的XML字段。我需要一个NTEXT变量来处理sp_xml_preparedocument,而不必修改xml。不应该“不惜一切代价”避免使用游标。有时,当光标方便时,您需要使用光标,这样可以节省大量的开发时间或数据迁移时间。有时我需要执行一次存储过程来完成一些事情,其中游标是完成它的最快方法。只有在成本不是问题的情况下,才说应该不惜一切代价避免它们,但对我和我所做的事情来说,这节省了很多时间,让我更有效率。话虽如此,我同意应该尽量避免使用光标。。。但并非不惜一切代价。@bunggo,使用游标来节省开发时间是一种非常糟糕的做法。数据库时间远比开发时间宝贵。是的,有时会使用游标,但实际上,除了有经验的dba之外,不应该使用游标,应用程序开发人员也不应该使用游标,因为他们太懒或太笨,无法学习如何正确地操作。顺便说一句,基于集合的解决方案通常更短,开发时间更短。数据库时间并不总是比开发时间更有价值。也许对你来说是,但对我来说不是。很多时候,我的客户只想从他们的数据库中挖掘一次数据,而不关心如何进行。有时候我能做的最快的方法就是用光标。有了最后期限和成本上限,有时即使不能让客户满意,也必须这样做。我同意你所说的作为指导方针,但不是作为规则。作为一名应用程序开发人员(和DBA),我们需要使用可用的工具来最好地解决问题,有时这是一个游标。一旦你知道你在做什么,游标实际上需要比基于集合的代码更长的时间来编写。
CREATE TABLE text_test (test NTEXT NOT NULL)

INSERT
INTO    text_test
VALUES  ('test')

DECLARE @t NVARCHAR(MAX);

DECLARE txt_cur CURSOR FOR
        SELECT test
        FROM   text_test

OPEN    txt_cur

FETCH   NEXT
FROM    txt_cur
INTO    @t

CLOSE txt_cur

DEALLOCATE txt_cur
GO

DROP TABLE text_test
GO