动态执行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