2017-10-20 73 views
0

一时无法插入记录作为统计SQL Server存储过程的动态EXEC插入

if @counts=1 
begin 
declare @sql1 as nvarchar(50); 
select @sql1='update '[email protected]_name+' set quantity='+cast(@tab_q as varchar)+'  where id='+cast(@tab_id as varchar)+';' 
exec sp_executesql @sql1 
end 
else 
begin 
declare @sql2 as nvarchar(50); 
set @sql2='insert into '[email protected]_name+' (id,name,quantity) values ('+CAST(@tab_id as varchar)+','''[email protected]_n+'''' 
set @sql2+=','+CAST(@tab_q as varchar)+');' 
select @sql2 
exec sp_executesql @sql2 
end 
End 

command: exec dbo.test @tab_name='inventory',@tab_id=4,@tab_n='chiku',@tab_q=123 

记录在删除列名时被插入,但在插入过程中不能与列名一起使用。

请帮忙。

感谢

+0

声明@ SQL1为NVARCHAR(50) 是DAT足够长的动态查询? –

+0

感谢frederik-de-clercq我把它做成了max,并且它的工作..错误显示在exec命令的第1行。真的让我很沮丧。非常感谢 – Santhosh

回答

1

这是更好地使用一种带参数的动态查询为nvarchar(最大)。 因为你永远不知道字符串可以多久。除非你知道字符串的最大长度。

dba还告诉我在字符串之前使用N'作为前缀来表示Unicode字符串文字。

0

增加@sql变量大小象下面这样:

declare @sql as nvarchar(max); 
.... 

declare @sql1 as nvarchar(max); 
... 

declare @sql2 as nvarchar(max);