当表名和列名未知时,如何编写插入存储过程?

时间:2013-06-07 06:18:31

标签: sql-server tsql stored-procedures insert

我想在SQL server中写一个存储过程,它将insert记录到数据库中,我想传递 table-name 列名,其为存储过程的参数

如果有帮助,我正在使用asp.net三层技术。

如果不可能,请告诉我一些替代方案。 提前谢谢

3 个答案:

答案 0 :(得分:0)

动态构建NVARCHAR中的SQL,并将其传递给存储过程sp_executesql:

DECLARE @sql NVARCHAR(MAX);
-- build your SQL in the NVARCHAR

EXEC sp_executesql @sql;

答案 1 :(得分:0)

理论上这是可能的,但我担心这不是最好的解决方案。

这种方法的问题在于,您不需要预先知道很多参数,例如列名,存在多少列名,类型是什么等等。

这意味着您必须将参数作为某些默认类型传递,例如nvarchar,然后将此类型转换为特定的列类型,这可能会导致性能和其他问题。

我建议您尝试使用Entity framework或其他一些ORM工具来处理插入内容。

答案 2 :(得分:0)

最佳答案是“不要那样做!”

关系数据库最适合用于建模......关系,为此你需要有一个边界和一个关于你要存储的数据的设计。这意味着您(或您的ORM)将知道基础表的外观。

如果你想要一个简单地抛出对象的地方,那就考虑使用像MongoDB这样的nosql文档存储。