SQL com # (SELECT * FROM) 的所有字段

SQL all fields with com # (SELECT * FROM)

我需要 运行 一个通用 SQL 查询,在查询结果的每个字段之间使用字符 #,以便我可以在 Excel 中使用。即:

SELECT * FROM EMPLOYEE

结果

NAME#AGE#SALARY#EMAIL 
Bob#59#1700#bob@bob.com   

我该怎么做?

SELECT Name + '#' + AGE FROM Employee

或者您可能需要转换一些字段,在 MSSQL 中它看起来像:

SELECT (CONVERT(VARCHAR(255), E.Age) + '#')
FROM Employee E

如果您不能指定值:

DECLARE @tableName VARCHAR(255) = 'Employee'

-- use MAX since this will be a long query
DECLARE @csv VARCHAR(MAX)

-- Create a query containing SELECT CONVERT(varchar(255), COALESCE(columnanme, '')) for all column names, in 1 line
-- COALACE in case a column is null (otherwise result will be 'null'.
SELECT @csv = COALESCE(@csv + 'CONVERT(VARCHAR(255),COALESCE(' + SC.name + ', '''')) + ''#'' + ', '')
FROM sysobjects SO
JOIN syscolumns SC ON SC.id = SO.id
WHERE SO.name = @tableName

-- chop off the last ','
SET @csv = (SELECT LEFT(@csv, LEN(@csv) -1))

SET @csv = 'SELECT ' + @csv + ' FROM ' + @tableName

-- for debugging: 
-- SELECT @csv

-- execute the SQL query
EXEC @csv

针对 MSSQL 的编辑,'EXEC' 将截断 @csv 变量,如果是这种情况,您将不得不使用 2 个变量(如果 @csv 长于 2000,则使用更多变量)

DECLARE @csvPartOne VARCHAR(500) = LEFT(@csv, 500)
DECLARE @csvPartTwo VARCHAR(MAX) = RIGHT(@csv, LEN(@csv) - 500)

-- execute the SQL query
EXEC (@csvPartOne + @csvPartTwo)

在 Caché 中,您可以使用系统管理门户导出数据。您可以在 documentation 中阅读如何做到这一点。