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

如何在SQL Server 2008中使用单个存储过程在多个表中插入数据?,sql,stored-procedures,Sql,Stored Procedures,假设我的数据库中有许多表。每次我都会在任何表中插入数据。那么,我可以使用一个存储过程来插入每个表中的所有数据,而不是为每个表编写一个存储过程吗 在这个场景中,每次我都会将表名和参数动态地传递给存储过程。如果是的话,有人能给出一些基本的方法吗?如果需要任何额外信息,请询问 感谢和问候, Rizwan Gazi。您可以使用动态SQL构建查询,然后使用以下命令运行查询: EXEC SP_EXECUTESQL(@SQL) (假设使用MS SQL Server) 但我不确定我会推荐它,而且可能会是一个测试

假设我的数据库中有许多表。每次我都会在任何表中插入数据。那么,我可以使用一个存储过程来插入每个表中的所有数据,而不是为每个表编写一个存储过程吗

在这个场景中,每次我都会将表名和参数动态地传递给存储过程。如果是的话,有人能给出一些基本的方法吗?如果需要任何额外信息,请询问

感谢和问候,
Rizwan Gazi。

您可以使用动态SQL构建查询,然后使用以下命令运行查询: EXEC SP_EXECUTESQL(@SQL) (假设使用MS SQL Server)

但我不确定我会推荐它,而且可能会是一个测试和维护的噩梦。拥有不同的存储过程将更容易测试和维护,并且性能会更好,因为不同的存储过程将有单独的查询计划


如果您使用的是代码,那么您可以使用一个脚本来处理基本的CRUD内容。

您可以使用动态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'''

这听起来是个很糟糕的主意。你为什么要对每张桌子一视同仁?每个表都需要单独附带业务逻辑。那将是一场维护噩梦。我只是想,如果我有100个表,那么我将不得不编写100个存储过程。所以我在考虑这个问题。我想这是我一直在寻找的解决方案,你提供的。谢谢亲爱的,不客气,亲爱的。如果对你有用的话,就把它标记为答案。但我必须在每个地方使用nvarchar而不是varchar。再次感谢。