繁体   English   中英

如何在SQL Server 2008中的多个表中使用单个存储过程进行数据插入?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM