为每个循环迭代所有表名(SQL)

时间:2019-06-28 09:53:05

标签: c# asp.net sql-server

我有一个具有相似表的数据库。每个表都以每年命名,例如1997、1998到2019年。每年将添加一个新表以及相应的年名称。我目前正在使用以下代码来获取表中特定值的计数。

下面的代码在ASP.NET应用程序的for循环内调用,该应用程序将年存储在数组中。我担心的是,现在每年我都必须为添加的新年度表更新ASP.NET中的数组。

有没有一种方法可以在数据库中命名所有表并将其作为参数传递给下面的代码。

(
  @TableName SysName,
  @SearchInput NVARCHAR(50),
  @SearchParam NVARCHAR(50)
)
AS 
  SET NOCOUNT ON;

  DECLARE @SQL NVARCHAR(MAX) = N'SELECT COUNT(' +
                               QUOTENAME(@SearchParam) +
                               N') FROM ' +
                               QUOTENAME(@TableName) +
                               N' WHERE ' +
                               QUOTENAME(@SearchParam) +
                               N' LIKE ' + 
                               QUOTENAME(@SearchInput, '''') +
                               N';';
EXEC    @return_value = [dbo].[CountSP]
        @TableName = N'1999',
        @SearchParam = N'USERDESC',
        @SearchInput = N'%lol%'

2 个答案:

答案 0 :(得分:1)

如果数据库中仅包含这些表,则可以使用

DataTable dt = dbConnection.GetSchema("Table");

获取所有表格并使用

 foreach (DataRow dr in dt) {
    string tableName = (string) dr[2];
    /* other code */
}

遍历它们。 如果数据库中还有其他表,则可以通过检查表名是否填满4号正则表达式或类似的东西来对它们进行排序。

答案 1 :(得分:1)

您可以查询系统视图以获取所有可用的表名。通过一些过滤,您可以限制它仅返回这些年份表,以防数据库中还有您要跳过的其他表。

SELECT DISTINCT name FROM sys.tables WHERE name LIKE 'Year%'

假设您的表被命名为:Year2000,Year2001等。您可以根据需要对其进行编辑。