如题
数据表 有写字段 是使用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
数据表 有写字段 是使用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
一般大家 如何 处理 ntext 类型参数?
我现在 有点混乱为保持 数据一致性
表字段是什么类型,对应的参数是否也 要设计为 相同类型?但在使用动态SQL 时 又要求 全部是 字符型......
好混乱啊
现在 连怎么表达 都说不清楚了
--明確轉換某種資料型別的運算式為另一種資料型別。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))