SQL 服务器存储过程插入动态执行
SQL server stored procedure insert with dynamic exec
在给定插入中的所有列名时无法插入记录
下面是SP
ALTER PROCEDURE [dbo].[test]
@tab_name nvarchar(50),
@tab_id int,
@tab_n nvarchar(50),
@tab_q int
as
Begin
declare @sql as nvarchar(50);
declare @counts as int;
select @sql='select @cnt=count(*) from '+@tab_name+' where id='+cast(@tab_id as varchar)+';'
exec sp_executesql @sql,N'@cnt int output', @cnt=@counts output
select @计数为计数
if @counts=1
begin
declare @sql1 as nvarchar(50);
select @sql1='update '+@tab_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 '+@tab_name+' (id,name,quantity) values ('+CAST(@tab_id as varchar)+','''+@tab_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
删除列名时插入记录,但在插入过程中不使用列名。
请帮忙。
谢谢
带参数的动态查询最好使用A nvarchar(max)。
因为你永远不知道字符串可以有多长。除非你知道字符串的最大长度。
一个 dba 还告诉我在字符串前使用 N' 作为前缀来表示 Unicode 字符串文字。
增加@sql 变量大小,如下所示:
declare @sql as nvarchar(max);
....
declare @sql1 as nvarchar(max);
...
declare @sql2 as nvarchar(max);
在给定插入中的所有列名时无法插入记录
下面是SP
ALTER PROCEDURE [dbo].[test]
@tab_name nvarchar(50),
@tab_id int,
@tab_n nvarchar(50),
@tab_q int
as
Begin
declare @sql as nvarchar(50);
declare @counts as int;
select @sql='select @cnt=count(*) from '+@tab_name+' where id='+cast(@tab_id as varchar)+';'
exec sp_executesql @sql,N'@cnt int output', @cnt=@counts output
select @计数为计数
if @counts=1
begin
declare @sql1 as nvarchar(50);
select @sql1='update '+@tab_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 '+@tab_name+' (id,name,quantity) values ('+CAST(@tab_id as varchar)+','''+@tab_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
删除列名时插入记录,但在插入过程中不使用列名。
请帮忙。
谢谢
带参数的动态查询最好使用A nvarchar(max)。 因为你永远不知道字符串可以有多长。除非你知道字符串的最大长度。
一个 dba 还告诉我在字符串前使用 N' 作为前缀来表示 Unicode 字符串文字。
增加@sql 变量大小,如下所示:
declare @sql as nvarchar(max);
....
declare @sql1 as nvarchar(max);
...
declare @sql2 as nvarchar(max);