2017-09-05 86 views
-1

我有一个SQL Server表,它具有列Blocks 1Blocks 2Blocks 3计算SQL字段名称以字开头

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

这已经适用于黑客行为(如下面的代码所示),当我的表中的列数有波动时,将无法正常工作。

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 

因此,这里是我的问题,所以我没有做上述不可靠黑客:

我怎么算我的表有多少次了,与“块”字开头的列名?

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

感谢您的帮助

+0

微软SQL就是我使用 – DannyBoy

+1

然后你需要编辑你的问题,并添加标签'SQL-server' – Igor

+1

'列名“块1”中,“块2”和“块3” '听起来你的数据库缺少1:m(或可能是m:m)的关系。让表格可以包含许多与之相关的块,并且不必计算列数 – Plutonix

回答

-1

我怎么算我的表有多少次了以单词“块”开头的列名?

的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' 

同样适用使用通配符。

+0

字段名称/列名称是OP后面的内容。不是名为“ColumnName”的字段 – JNevill

+0

啊,谢谢,我会更新我的答案。 –

-1

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

这是如何在使用选择命令和数据读取器后在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 
0

在SQL你可以使用下面的

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

我在我的例子中,我查表llf_promotion得到包含使用SQL Server通配符字列的列表%。如果我想要找到任何以block开始的列,我会使用“column_name like'block%'”,其中最后只有通配符。

通过以下你可以得到的只是计数而不是如上所示的列的列表。

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

然后我会如何在我的下一个选择状态员中使用这个计数?例如,如果我有3列以块开始,我的选择语句稍后将只选择块1,块2和块3 – DannyBoy

+0

我不确定你在做什么,但在我看来,你可能会更好的住房将数据块分隔在一个单独的表格中,而不是每次添加新的列。 – Joel

相关问题