Hoewel velen zeggen dat het de beste gewoonte is om elke kolom die u wilt retourneren expliciet te vermelden, zijn er situaties waarin u tijd wilt besparen en bepaalde kolommen uit de resultaten wilt weglaten (bijv. testen). Hieronder heb ik twee opties gegeven die dit probleem oplossen.
DELIMITER $$
CREATE DEFINER=`root`@`%` FUNCTION `getTableColumns`(_schemaName varchar(100), _tableName varchar(100), _omitColumns varchar(200)) RETURNS varchar(5000) CHARSET latin1
BEGIN
SELECT GROUP_CONCAT(COLUMN_NAME) FROM information_schema.columns
WHERE table_schema = _schemaName AND table_name = _tableName AND FIND_IN_SET(COLUMN_NAME,_omitColumns) = 0 ORDER BY ORDINAL_POSITION;
END
Select-statement maken en uitvoeren:
SET @sql = concat('SELECT ', (SELECT
functions.getTableColumns('test', 'employees', 'age,dateOfHire')), ' FROM test.employees');
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
SET @sql = CONCAT('SELECT ', (SELECT GROUP_CONCAT(COLUMN_NAME) FROM
information_schema.columns WHERE table_schema = 'test' AND table_name =
'employees' AND column_name NOT IN ('age', 'dateOfHire')),
' from test.eployees');
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
*Vervang test door uw eigen schemanaam
**Vervang medewerkers door uw eigen tafelnaam
***Vervang age,dateOfHire door de kolommen die u wilt weglaten (u kunt deze leeg laten om alle kolommen terug te geven of voer één kolomnaam in om deze weg te laten)
** **U kunt de lengtes van de varchars in de functie aanpassen aan uw behoeften