请大家帮看看这存储过程的问题
CREATE PROCEDURE UP
(
@A_L nvarchar(20)
)
AS
declare @LF bit
declare @sql varchar(1024)
declare @Update int
set @Update = 0;
select @LF=LF from A WHERE ID= @A_L
IF @LF IS NOT NULL
BEGIN
select @sql = 'UPDATE A SET state = 2 WHERE (ID = @A_L) '
select @Update = 1;
END
if @Update = 1
exec(@sql);
UPDATE不起作用。问题出在哪里?
------解决方案--------------------改成
select @sql = 'UPDATE A SET state = 2 WHERE ID = ' + convert(varchar,@A_L)
或者
exec(@sql) 改成 exec sp_executesql @sql,N '@A_L int ',@A_L
两者选1
------解决方案--------------------看错了你的数据类型
@sql 类型改成
declare @sql nvarchar(1024) -- 这个必须是 nvarchar 类型,然后
exec(@sql)
改成
exec sp_executesql @sql,N '@A_L nvarchar(20) ',@A_L
------解决方案--------------------print 出来看看
然后执行print出来的语句,看看如何
------解决方案--------------------CREATE PROCEDURE UP
(
@A_L nvarchar(20)
)
AS
declare @LF bit
declare @sql nvarchar(1024) /*声明为nvarchar类型*/
select @LF=LF from A WHERE ID= @A_L
IF @LF IS NOT NULL
BEGIN
set @sql = N 'UPDATE A SET state = 2 WHERE (ID = @A_L) '
EXEC sp_executesql @sql,N '@A_L nvarchar(20) ',@A_L
END
GO