C# 插入数据的动态SQL查询

C# 插入数据的动态SQL查询,c#,sql,sql-server,dynamic-sql,C#,Sql,Sql Server,Dynamic Sql,我已经阅读了这里的各种帖子,但是我仍然无法使用动态SQL编写工作代码 对于CRUD操作,我通常更喜欢EF/dapper(任何其他ORM),但在这种情况下我不能 我试图实现的是允许用户选择他/她想要在其上执行CRUD操作的表。我预计将有约10-15个表可用于执行这些操作,但数量可能会有所不同。因为我不知道用户想要在哪个表上执行操作,所以我想我可以为这个功能编写一个动态查询 这就是我所拥有的,但它确实有效 CREATE PROCEDURE usp_insert @TABLENAME NVA

我已经阅读了这里的各种帖子,但是我仍然无法使用动态SQL编写工作代码

对于CRUD操作,我通常更喜欢EF/dapper(任何其他ORM),但在这种情况下我不能

我试图实现的是允许用户选择他/她想要在其上执行CRUD操作的表。我预计将有约10-15个表可用于执行这些操作,但数量可能会有所不同。因为我不知道用户想要在哪个表上执行操作,所以我想我可以为这个功能编写一个动态查询

这就是我所拥有的,但它确实有效

CREATE PROCEDURE usp_insert 
    @TABLENAME NVARCHAR(30),
    @COLUMNNAME NVARCHAR(MAX),
   -- NEED TO HAVE A VARIABLE FOR INPUT DATA    
AS
BEGIN
    SET NOCOUNT ON;

    IF EXISTS(SELECT @TABLENAME FROM INFORMATION_SCHEMA.TABLES 
              WHERE TABLE_NAME = @TABLENAME)
        SELECT @ColumnName = COALESCE(@ColumnName + ', ', '') + COLUMN_NAME
        FROM INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_NAME = @TABLENAME

    DECLARE @SqlStatement nvarchar(max);
    SET @SqlStatement = N'INSERT INTO '+ @TABLENAME+'('+@COLUMNNAME+ ') VALUES (---NOT SURE HOW TO PASS VALUES---)'
      
    EXEC (@SqlStatement);
    PRINT @SQLSTATEMENT
END
上述代码的问题是

  • 我不知道如何传递数据

  • 这些列会重复出现,比如

     INSERT INTO testtable1(MyProperty1, MyProperty2, MyProperty3, MyProperty4, MyProperty5, MyProperty1, MyProperty2, MyProperty3, MyProperty4, MyProperty5)
    
    如果我将我的列作为参数传递

  • 任何帮助都将受到高度赞赏…干杯

    这些是我已经研究过的链接:


    编辑:为了避免任何混淆,我所指的表是整个数据库中唯一的表(它只是一个检查这种方法是否有效的POC)。实现(不是我的设计)是这样的。

    我将在下拉列表中列出表,用户将选择表,并根据所选表获取数据,并在UI上的网格中显示。然后,用户可以编辑(更新)、插入(添加新记录)或删除(软删除)与该表相关的记录。
    我也愿意接受其他建议,但此列表(下拉列表)是可配置的,即可以在运行时添加新表,因此我只能为事先知道的表编写SP。我同意这不是一个好的设计,但这是我必须做的

    希望这有帮助。

    什么是“不起作用”呢?为什么不起作用呢?不过,老实说,这有一股强烈的气味。若您不知道要插入到哪个表中,那个么获取一个参数来接受所述数据基本上是不可能的。如果您需要一个过程来处理
    INSERT
    语句,那么每个表有一个,应用程序将有不同表的相关屏幕,并调用相应的过程。您试图进入一个不应该尝试的兔子洞。使用Distinct删除重复列。请参阅:尽管@jdweng在该查询中不应该有重复的列,除非OP在不同的模式中有同名的对象;但是如果是这样的话,那么架构名称也应该是查询中的一个参数,因为它们也很容易有不同的定义。@Larnu:OP得到了重复项,因为相同的列名在多个表中。