Sql server 计算以单词开头的SQL列名
我有一个SQL Server表,其中包含列Sql server 计算以单词开头的SQL列名,sql-server,vb.net,Sql Server,Vb.net,我有一个SQL Server表,其中包含列块1、块2和块3 如果所有这些列中都已包含数据,则我的程序将以编程方式在表中创建另一列,并使用下一个块编号。在这种情况下,将创建的下一个标题将是块4 这已经适用于一个hack(如下代码所示),当我的表中有另一列的列数波动时,它将不起作用 con.Open() Cmd = New SqlCommand("Select * From [Official] WHERE CONVERT(nvarchar(50), ID) ='" + Ses
块1
、块2
和块3
如果所有这些列中都已包含数据,则我的程序将以编程方式在表中创建另一列,并使用下一个块编号。在这种情况下,将创建的下一个标题将是块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中执行此操作
谢谢你的帮助
如何计算我的表中有多少列名称以单词“Blocks”开头
要用于简单计数的SQL语法如下所示:
select count(*) from tablename foo where foo.columnname = 'Blocks'
select count(*) from tablename foo where foo.columnname like 'Blocks%'
或者对于这样的通配符:
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'
使用通配符也是一样。在一些帖子的帮助下,我能够更好地搜索答案,并得到以下解决方案 这是一个示例,说明了在使用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
在SQL中,可以使用以下命令
select column_name
from information_schema.columns
where table_name = 'llf_promotion' and column_name like '%block%'
在我的示例中,我正在使用sql server通配符%搜索表llf_promotion,以获取包含单词block的列列表。如果我想找到任何以block开头的列,我会使用“column_name like'block%”,其中我只在末尾使用通配符
使用下面的内容,您可以只获得计数,而不是如上所示的列列表
select count(*)
from information_schema.columns
where table_name = 'llf_promotion' and column_name like '%block%'
我使用的是Microsoft SQL。您需要编辑问题并添加标签
SQL server
列“块1”、“块2”和“块3”
听起来您的数据库缺少1:m(或者可能是m:m)关系。使表可以有许多与之关联的块,并且您不必计算列。您的模式听起来不太好,所以您将一次又一次地遇到类似的问题。同样,我相信您希望获得dr1.GetSchemaTable()
。它返回一个datatable
类型的对象,您可以在代码中找到SqlDataReader
对象dr1
的列名。我会写这篇文章作为一个答案,但我已经有8年没有写过vb.net了,所以我肯定会把代码的实际实现搞砸。字段名/列名就是OP想要的。不是一个名为“ColumnName”的字段,那么我如何在下一个select Statemens中使用此计数?例如,如果我有3个以块开头的列,我的select语句稍后将只选择块1、块2和块3,我不确定您要做什么,但在我看来,您最好将块数据保存在单独的表中,而不是每次添加新的列。