日期:2014-05-19  浏览次数:20598 次

动态执行SQL,这个Image字段应该怎么处理?大人救命!
我想实现的就是写这个存储过程,执行的时候,有不为空的参数传入才去更新他对应的子段,如果传入为空值,就不去更新了,保留原值。其他类型的都好办,就Image类型的实在不会,我在这个字段中存的是文件!


CREATE   PROCEDURE   UpdateSP  
--   Add   the   parameters   for   the   stored   procedure   here
@myName   NVARCHAR(50),
@image   IMAGE,
@phone   NVARCHAR(50)
AS
BEGIN
DECLARE   @sql   NVARCHAR(MAX)
--   SET   NOCOUNT   ON   added   to   prevent   extra   result   sets   from
--   interfering   with   SELECT   statements.
SET   NOCOUNT   ON;
SET   @sql   =   ' ';

IF   @image   is   not   NULL
BEGIN
SET   @sql   =   '   set   IMAGE   =   '   +   @image   --   这个地方就不会了,怎么写都是错
END

IF   @phone   IS   NOT   NULL
BEGIN
IF   @sql   <>   ' '
SET   @sql   =   @sql   +   '   ,   '
SET   @sql   =   @sql   +   '   SET   Phone   =   ' ' '   +   @phone     +   ' ' ' '
END

if   @sql   <>   ' '
BEGIN
SET   @sql   =   'UPDATE   MyTbl   '   +   @sql   +   '   WHERE   MyName   =   ' ' '   +   @myName   +   ' ' ' '
EXEC(@sql)
END
ELSE
BEGIN
PRINT   'EMPTY '
END
END

------解决方案--------------------
使用exec sp_executesql... 可以解决此问题,具体用法请参照联机帮助,exec 后面直接跟的动态SQL语句不能含有变量,你的这个问题刚好有必须要有变量,所以要用 sp_executesql