请问update和insert通用存储过程应该怎么写?
select和delete的通用存储过程比较好写。
但是更新update和添加insert两个存储过程有点问题,请各位帮忙!
-----------------------
CREATE PROCEDURE sp_update
@tblName varchar(255), -- 表名
@strUpdate varchar(1000), -- 更新内容
@strWhere varchar(1000) = ' ' -- 查询条件 (不要加 where)
AS
BEGIN
declare @strSQL varchar(2000) -- 主语句
if @strWhere != ' '
set @strSQL = 'update [ ' + @tblName + '] set ' + @strUpdate + 'where ( ' + @strWhere + ') '
else
set @strSQL = 'update [ ' + @tblName + '] set ' + @strUpdate execute (@strSQL)
END
---------------------------
@strUpdate的内容就是如: [字段1]=值1,[字段2]=值2,[字段n]=值n
现在的问题:如果要更新的某个字段类型是ntext,其对应的值为2万字的一篇文章,那么我这里@strSQL类型因为不能为ntext,varchar类型又最多8000,所以最后执行的execute (@strSQL) 肯定就会出错,请问应该怎么办呢?
另外,如果某个字段的值正好为:“ [xxx]=xxx, ”这种情况,那么@strUpdate的内容就可能是:[字段1]=[xxx]=xxx,,[字段2]=值2,[字段n]=值n 这种情况,请问如何处理这个问题呢?
------解决方案--------------------支持楼主,先顶一下
------解决方案--------------------单独更新ntext啊,其它字段一起更新
------解决方案--------------------要是sqlserver2005就可以用varchar(max)
------解决方案---------------------- 类似下面这样可以解决长度问题
CREATE PROCEDURE sp_update
@tblName varchar(255), -- 表名
@strUpdate varchar(1000), -- 更新内容
@strWhere varchar(1000) = ' ' -- 查询条件 (不要加 where)
AS
BEGIN
declare @strSQL nvarchar(4000) -- 主语句
if @strWhere != ' '
set @strSQL = 'update [ ' + @tblName + '] set @strUpdate where ( ' + @strWhere + ') '
else
set @strSQL = 'update [ ' + @tblName + '] set @strUpdate '
execute sp_executesql @strSQL, N '@strUpdate varchar(1000) ', @strUpdate
END
------解决方案--------------------但上述方法无法数据类型的问题.
如果单独处理text列, 则是可以做到的
-- 类似下面这样可以解决长度问题
CREATE PROCEDURE sp_update
@tblName varchar(255), -- 表名
@strUpdate text, -- 更新内容
@strWhere varchar(1000) = ' ' -- 查询条件 (不要加 where)
AS
BEGIN
declare @strSQL nvarchar(4000) -- 主语句
if @strWhere != ' '
set @strSQL = 'update [ ' + @tblName + '] set @strUpdate where ( ' + @strWhere + ') '
else
set @strSQL = 'update [ ' + @tblName + '] set @strUpdate '
execute sp_executesql @strSQL, N '@strUpdate text ', @strUpdate
END
------解决方案--------------------CREATE PROCEDURE PRO_INSERT
@tblName Nvarchar(100), -- 表名
@strUpdate Nvarchar(4000), -- 更新内容
@strWhere varchar(1000) = ' ' -- 查询条件 (不要加 where)
AS
DECLARE @EXEC nvarchar(4000) --最终执行语句
DECLARE @parm nvarchar(4000) --参数变量
DECLARE @col nvarchar(4000) --列字段变量
DECLARE @value nvarchar(4000) --值字段变量
SET @parm= ' '
SET @col= ' '
SET @value= ' '
----设置参数变量