我有 6 个具有不同字段的表。我想动态访问表名。有什么想法可以做到吗? 我的代码如下,这是一个简单的过程,我想使其动态地在 C# 中使用。怎么办?
Create procedure [dbo].[Insert_Data] (@Id int,@FeesHead nchar(20),@Fees int,@Remarks nchar(20))
as
begin
Insert into FeesHead(ID,FeesHead,Fees,Remarks)values(@Id,@FeesHead,@Fees,@Remarks)
End
最佳答案
不要去那里。
这是一个坏主意,因为您最终会得到一个又长又低效的存储过程,该存储过程容易受到 SQL 注入(inject)攻击并出现性能问题。
为每个表编写一个插入存储过程是正确的方法。
您写道,您有六个具有不同列的不同表,因此编写一个存储过程来处理所有这些表的插入将需要您发送所有列的所有参数以及表名称的参数和嵌套的if...else 有 6 个可能的路径,每个表一个。
这最终会成为一段又长、又乱、写得不好的代码,在每个参数上都很糟糕:安全性、性能、代码可读性和可维护性。
实现这一目标的唯一方法是为每个表编写单独的插入存储过程,然后编写一个存储过程,该存储过程将采用所有可能的参数和表名称,并在其中决定什么插入要根据表名参数的值执行的存储过程。 但是,您最好将这些条件留给 SQL 客户端(在本例中为您的 C# 代码),然后再留给 SQL Server。
关于sql-server - 我想编写一个通用存储过程来将数据插入数据库的任何表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30684337/