我想实现的就是写这个存储过程,执行的时候,有不为空的参数传入才去更新他对应的子段,如果传入为空值,就不去更新了,保留原值。其他类型的都好办,就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

解决方案 »

  1.   

    http://community.csdn.net/Expert/TopicView3.asp?id=5637094
      

  2.   

    没能解决我的问题,而且我发现用UpdateText不是什么好办法重要提示:  
    后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 请改用大值数据类型和 UPDATE 语句的 .WRITE 子句。
      

  3.   

    'UPDATE MyTbl ' + @sql + ' WHERE MyName = ''' + @myName + ''''按你的写法拆开
    UPDATE MyTbl  set IMAGE = '...',set Phone = '...' where...
    这里就错了IF @phone IS NOT NULL
    BEGIN
    IF @sql <> ''
    SET @sql = @sql + ' , '
    SET @sql = @sql + ' SET Phone = ''' + @phone  + ''''
    END第2个 SET @sql = @sql + ' SET Phone = ''' + @phone  + ''''IF @phone IS NOT NULL
    BEGIN
    IF @sql <> ''
    begin
    SET @sql = @sql + ' , '
    SET @sql = @sql + 'Phone = ''' + @phone  + ''''
    end
    else 
    begin
    SET @sql = @sql + 'set Phone = ''' + @phone  + ''''
    end
    END你那样写 会报 set错误
      

  4.   

    nvarchar 这种类型也要注意 需要+N
      

  5.   

    如welove1983() 所说的你写动态SQL本身就有语法问题至于UpdateText,自己查看帮助,多看帮助对自己有好处
    http://community.csdn.net/Expert/TopicView3.asp?id=5637094 这个帖子里讲的很清楚了,但还是建议LZ多看看帮助
      

  6.   

    SET @sql = ' set IMAGE = ' + @image -- 这个地方就不会了,怎么写都是错后面不是NVARCHAR 类型
      

  7.   

    晕,我的意思不是那个语法错误,我只是随便写了一个例子,可能这个例子是错误的,但这并不影响我问的问题。我就是想问,我该怎么样把那个Image 类型的+ 进去,让它成为一段可以动态执行的代码,怎么就理解不了我在说什么呢?
      

  8.   

    SET @sql = ' set IMAGE = ' + @image -- 这个地方就不会了,怎么写都是错后面不是NVARCHAR 类型=========================================================================我知道后面不是字符类型,如果是的话我也就不用问了。我就是说怎么吧这个Image类型加进去,然后可以用Exec(@sql)执行。
      

  9.   

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