![](/img/trans.png)
[英]SQL Server Stored Procedure - Can I do multiple things in a single procedure?
[英]How I can use a single stored procedure for data insertion in multiple tables in SQL Server 2008?
假设我的数据库中有很多表。 每次我将数据插入任何表中。 因此,是否可以对每个表中的所有数据插入使用单个存储过程,而不是为每个表编写一个存储过程?
在这种情况下,每次将表名称和参数动态传递给存储过程时。 如果是,任何人都可以给出一些基本的想法如何执行此操作吗? 如果需要任何其他信息,请询问。
谢谢,问候。
您可以使用动态SQL并动态构建insert语句。 不建议这样做,但是它应该可以解决您所询问的问题。
(我没有运行此代码,但是您可以通过构建插入字符串然后执行它来查看正在完成的工作)
在此过程中,您传入您关心的表名,列和值,然后在基于行的操作中将其触发。 通过一些小的调整,您也可以基于它进行设置。
create procedure dbo.TableInsert
@tablename varchar(100)
, @columnlist varchar(max)
, @valueslist varchar(max)
as
begin
declare @sql varchar(max)
set @sql =
'insert into ' + @tablename
+ '(' + @columnlist + ')'
+ ' VALUES (' + @valueslist + ')'
print(@sql)
sp_executesql (@sql)
end
go
执行看起来像这样:
exec dbo.TableInsert
@tablename = 'TestTable'
, @columnlist = 'col1, col2, col3'
, @valuelist = '1,2,3'
在此版本中,文本插入会有些棘手,因为您必须将其用单引号引起来。
exec dbo.TableInsert
@tablename = 'TestTable'
, @columnlist = 'col1, col2, col3'
, @valuelist = '''1'',''2'',''3'''
您可以使用动态SQL生成查询,然后使用以下命令运行它:EXEC SP_EXECUTESQL(@SQL)(假设为MS SQL Server)
不确定我是否会推荐它,并且可能会成为测试和维护的噩梦。 具有不同的存储过程将更易于测试和维护,并会更好地执行,因为不同的存储过程将具有单独的查询计划。
如果您使用的是代码,则可以使用ORM处理基本的CRUD内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.