计算以单词开头的SQL列名

时间:2017-09-05 18:13:23

标签: sql-server vb.net

我有一个SQL Server表,其中包含Blocks 1Blocks 2Blocks 3列。

如果所有这些列都包含数据,我的程序将以编程方式使用下一个块编号在表中创建另一列。在这种情况下,将创建的下一个标题为Blocks 4

这已经适用于hack(在下面的代码中显示),当我有另一列在我的表中的列数中波动时,它将无效。

con.Open()           
Cmd = New SqlCommand("Select * From [Official] WHERE CONVERT(nvarchar(50), ID) ='" + Session("ID") + "'", con)
dr1 = Cmd.ExecuteReader
dr1.Read()

'If I add or removed columns in official table I need to add or subtract to number below!!!

Dim NumberOfBlocks As Integer = dr1.VisibleFieldCount - 15 'minus 15 because that is the number of items other than blocks within officials table

所以这是我的问题,所以我不必做上面不可靠的黑客攻击:

如何计算我的表格中有多少次以“Blocks”开头的列名?

我希望能够在Visual Basic中使用SQL语法或仅在SQL中执行此操作。

感谢您的帮助

3 个答案:

答案 0 :(得分:0)

在SQL中,您可以使用以下

select column_name 
from information_schema.columns 
where table_name = 'llf_promotion' and column_name like '%block%'

我的示例我正在搜索表 llf_promotion 以使用sql server通配符%获取包含一词的列的列表。如果我想要找到任何以块开头的列,我会使用“column_name like'block%'”,其中我最后只有通配符。

使用以下内容,您只需获取计数而不是列表,如上所示。

select count(*) 
    from information_schema.columns 
    where table_name = 'llf_promotion' and column_name like '%block%'

答案 1 :(得分:-1)

  

如何计算我的表格中有多少次以“Blocks”开头的列名?

您希望用于简单计数的SQL语法如下所示:

select count(*) from tablename foo where foo.columnname = 'Blocks'

或者像这样的外卡:

select count(*) from tablename foo where foo.columnname like 'Blocks%'

您可以将输出值存储为变量,并在程序的其余部分中使用它。

  

字段名称/列名称是OP所追求的。不是名为“ColumnName”的字段

在这种情况下,您可能希望这样做:

select column_name 
from information_schema.columns 
where table_name = 'foo' and column_name = 'Blocks'

使用通配符同样适用。

答案 2 :(得分:-1)

在一些帖子的帮助下,我能够更好地搜索答案并获得以下解决方案。

这是在使用select命令和数据阅读器后如何在visual basic中完成此操作的示例。

下面的代码是从每列获取列名,并检查它是否以单词“Blocks”开头,然后计算它们以便稍后在我的程序中使用。谢谢你的帮助。

Dim CountBlocks As Integer = 0
For i = 0 To dr1.VisibleFieldCount - 1
    If dr1.GetName(i).StartsWith("Blocks") Then
    CountBlocks = CountBlocks + 1
    Else
    'Dont count
    End If
Next