我有一个SQL Server表,其中包含Blocks 1
,Blocks 2
和Blocks 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中执行此操作。
感谢您的帮助
答案 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