微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Visual Studio 2019 c-sharp中检索SQL Server 2019表列列表的ExecuteScalar方法ASCII排序不正确

如何解决Visual Studio 2019 c-sharp中检索SQL Server 2019表列列表的ExecuteScalar方法ASCII排序不正确

我的 sql Server 数据库中有一个表,结构如下:

CREATE TABLE [file].[NumeTestINV](
    [Category] [nvarchar](255) NULL,[Class] [nvarchar](255) NULL,[Company] [nvarchar](255) NULL,[Division] [nvarchar](255) NULL,[Jan] [float] NULL,[Feb] [float] NULL,[Mar] [float] NULL,[Apr] [float] NULL,[May] [float] NULL,[Jun] [float] NULL,[Jul] [float] NULL,[Aug] [float] NULL,[Sep] [float] NULL,[Oct] [float] NULL,[Nov] [float] NULL,[Dec] [float] NULL
) ON [PRIMARY]

我正在尝试通过 Visual Studio 2019 SSIS 脚本任务中的 C# 代码检索其列列表。我有以下代码 c-sharp 片段。

//Get Matching Column List from sql Server
string sqlColumnList = "";
sqlCommand cmd = myADONETConnection.CreateCommand();
cmd.CommandText = sqlQueryToGetMatchingColumn;
sqlColumnList = (string)cmd.ExecuteScalar();
MessageBox.Show(" Matching Columns: " + sqlColumnList);

然而,问题是列列表被错误地以 ASCII 排序输出。我不知道为什么我的 sqlColumnList 没有按照物理方式显示正确的 sql 表列顺序,而是显示如下?

"[Apr],[Aug],[Category],[Class],[Company],[Dec],[Division],[Feb],[Jan],[Jul],[Jun],[Mar],[May],[Nov],[Oct],[Sep]"

我期待以下输出

"[Category],[Apr],[Sep],[Dec]"

这里是 sqlQueryToGetMatchingColumn 的代码,我的源代码一个 Excel 文件,列列表与我的物理 sql 表的顺序相同:

sqlQueryToGetMatchingColumn = "select STUFF((Select  ',['+Column_Name+']' from information_schema.Columns where Table_Name='" +
                            TableName + "' and Table_SChema='" + SchemaName + "'" +
                            "and Column_Name in (" + @ExcelHeaderColumn + ") for xml path('')),1,'') AS ColumnList";

这是 sqlQueryToGetMatchingColumn 的输出

"select STUFF((Select  ',['+Column_Name+']' from information_schema.Columns where Table_Name='NumeTestINV' and Table_SChema='file'and Column_Name in ('Category','Class','Company','Division','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec') for xml path('')),'') AS ColumnList"

CommandText 输出如下:

"select STUFF((Select  ','') AS ColumnList"

我希望这是我的代码片段中的一个代码更改,并且我不必完全更改检索 sql 列列表的方法

解决方法

如果您希望列按顺序排列,请尝试以下操作:

select string_agg( quotename(name),',') within group (order by columnproperty(c.object_id,c.name,'ordinal') ) columnList
from sys.columns c
where c.object_id = object_id('[file].[NumeTestINV]')

select string_agg( quotename(column_name),') within group (order by ordinal_position) columnList
from information_schema.COLUMNS
where TABLE_SCHEMA = 'file'
  and TABLE_NAME = 'NumeTestINV'

或使用旧的 XML 连接,

select STUFF((Select  ','+ quotename(Column_Name) from Information_schema.Columns where Table_Name='NumeTestINV' and Table_SChema='file'and Column_Name in ('Category','Class','Company','Division','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec') order by ordinal_position for xml path('')),1,'') AS ColumnList

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?