我找了一个类似的问题,但没有找到解决我问题的方法。我开发了一个与mysql服务器通信的C#程序。
我尝试将表从mysql服务器导出到csv文件,包括顶部每列的名称。它正在工作,但这是一个问题。当我使用以下代码时:
string query = "SELECT /*here i insert column names*/
UNION SELECT /*here i insert column names*/
FROM `tableName` INTO OUTFILE /*here I insert the path*/
\ FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'";
它有效,但我必须写每一列。有可能避免这种情况吗?所以我可以使用*运算符,如下所示:
string query = "SELECT *
UNION SELECT *
FROM `tableName` INTO OUTFILE /*here I insert the path*/
\ FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'";
因为本规范对我不起作用。
答案 0 :(得分:1)
您可以使用以下语句从表中获取所有列名:
SELECT COLUMN_NAME, ORDINAL_POSITION FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Bundle'
导出行 - >使用上述语句获取所有列名称 - >使用C#
将结果写入文件的开头我就是这样做的。另一种可能性是动态枢轴,这要复杂得多。
修改强>
由于OP提到他可能无法访问导出的文件,因此这是一个快速而肮脏的声明,可以实现想要的结果:
DECLARE @DataList varchar(500);
SELECT @DataList = COALESCE(@DataList + ',', '') + 'CAST(' + COLUMN_NAME + ' AS varchar(255))'
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YOURTABLE'
DECLARE @PivotList varchar(500);
SELECT @PivotList = COALESCE(@PivotList + ',', '') + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YOURTABLE'
DECLARE @GroupList varchar(500);
SELECT @GroupList = COALESCE(@GroupList + ',', '') + 'MIN(CAST(' + COLUMN_NAME + ' AS varchar(255)))'
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YOURTABLE'
DECLARE @Query varchar(1000)
SET @Query = '
SELECT ' + @GroupList + ' FROM INFORMATION_SCHEMA.COLUMNS
PIVOT
(MAX(COLUMN_NAME) FOR COLUMN_NAME IN (' + @PivotList + ')) AS B
WHERE TABLE_NAME = ''YOURTABLE''
GROUP BY TABLE_NAME
UNION ALL
SELECT ' + @DataList + ' FROM YOURTABLE'
EXEC (@Query)
我希望这适合你!
问候。