如题
数据表 有写字段 是使用ntext 类型的
所以为了保持数据一致性,定义参数时 也按照了 数据表的类型定义了
但是 当在写动态SQL 时,这个类型 就会报错如以下案例,就出现这种问题。因为写存储过程经验不足,所以希望 大家能指点下
备注:convert(@contentEN as varchar(8000)) 这样写的报错提示为“ contentEN 附近有语法错误”
而直接使用 +@contentEN + 报错提示为“对数据类型而言运算符无效,运算类型为ADD,类型为ntext”

CREATE PROCEDURE DocumentationSetting
@operation int,
@stren varchar(50),--英文字段
@strcn varchar(50),--中文字段@contentEN ntext,--英文字段值
@contentCN ntext --中文字段值 AS
set nocount onif @operation=0 --0执行查询操作!begin
       DECLARE  @Sql  NVARCHAR(1000)--定义动态 查询SQL
       SET @Sql='select  '+@stren+' , '+@strcn+' from   Profile_INFO'
       exec(@sql) 
endelse
--==============================================================================--否则执行更新操作!
begin
        DECLARE  @SqlStr  NVARCHAR(1000)--定义动态 更新 SQL
        SET @SqlStr=' update  Profile_INFO set  '+@stren+'='+convert(@contentEN as varchar(8000)) +' , '+@strcn+'='+convert(@contentCN as varchar(8000))
         exec(@SqlStr) 
end
GO

解决方案 »

  1.   

    cast(@contentEN as varchar(8000))
      

  2.   

    convert(varchar(8000), @contentEN)
      

  3.   

    谢谢
    一般大家 如何 处理 ntext 类型参数?
    我现在 有点混乱为保持 数据一致性
    表字段是什么类型,对应的参数是否也 要设计为 相同类型?但在使用动态SQL 时 又要求 全部是 字符型......
    好混乱啊
    现在 连怎么表达 都说不清楚了
      

  4.   

    convert(@contentEN as varchar(max)) 
      

  5.   

    --CAST 與 CONVERT
    --明確轉換某種資料型別的運算式為另一種資料型別。CAST 與 CONVERT 提供類似的功能。--語法
    --使用 CAST:--CAST ( expression AS data_type ) --使用 CONVERT:--CONVERT ( data_type [ ( length ) ] , expression [ , style ] )DECLARE @myval decimal (5, 2)
    SET @myval = 193.57
    SELECT CAST(CAST(@myval AS varbinary(20)) AS decimal(10,5))
    -- Or, using CONVERT
    SELECT CONVERT(decimal(10,5), CONVERT(varbinary(20), @myval))