带动态表名的C#查询

时间:2017-10-16 07:52:35

标签: c# sql linq

我想构建一个查询,其中tablename将是动态的,我将从另一个查询中获取它。这2个查询位于不同的datacontexts中。

CODE

var tablename = (from tab in db.Tabs
                 where tab.id == tabid
                 select tab.name).FirstOrDefault();

var pid = (from p in tablename
           select p.id).FirstOrDefault();

3 个答案:

答案 0 :(得分:2)

表名不能作为参数提供,因此您必须先在函数或存储过程中手动构造SQL字符串,然后才能执行它。

    create PROC read_from_dynamic_table(@TableName NVARCHAR(50))
AS
BEGIN 
DECLARE @SQLSelectQuery NVARCHAR(MAX)=''
SET @SQLSelectQuery = 'SELECT * FROM ' + @TableName

  exec(@SQLSelectQuery)
END

然后,您可以使用表名作为参数

来调用proc

答案 1 :(得分:0)

要将表名动态地提供给第二个查询,可以使用存储过程而不是LINQ。

当您获得存储过程时,然后通过传递 df[boolMask]= ser (第一次查询的结果)来调用它。

SP doc:https://docs.microsoft.com/en-us/sql/relational-databases/stored-procedures/create-a-stored-procedure

这是一个粗略的例子,只是为了给你一个想法:

tablename

答案 2 :(得分:-3)

using(SqlConnection sqlCon = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
    SqlCommand com = new SqlCommand();
    SqlDataReader sqlReader;

    com.CommandText = "Select id from @tableName";
    com.CommandType = CommandType.Text;
    com.Parameters.Add(new SqlParameter("@tableName", tableName);

    com.Connection = sqlCon;
    sqlCon.Open();
    sqlReader = com.ExecuteReader();

    var dt = new DataTable();
    dt.Load(sqlReader); //Query output is in dt now
}