Reputation: 390
I want column data type and if data type is int then show column name and if varchar then show column name with '' in horizontal line alien
I tried something like but don't know how to apply condition:
SELECT
t.Name 'Data type'
FROM
sys.columns c
INNER JOIN
sys.types t ON c.user_type_id = t.user_type_id
where object_id = OBJECT_ID('tbl_Check_Sql_Query')
Suppose my column has Data type
id int
name varchar
Email_ID varchar
Then i want
id,'name','Email_ID'
Upvotes: 2
Views: 319
Reputation: 14928
You can directly use INFORMATION_SCHEMA.COLUMNS
system view as
SELECT TABLE_NAME,
CASE DATA_TYPE WHEN 'INT' THEN COLUMN_NAME
--WHEN 'VARCHAR' I don't know what you mean by "in horizontal line alien"
END
FROM INFORMATION_SCHEMA.COLUMNS;
--WHERE TABLE_NAME = 'TableName'
Or
SELECT TABLE_NAME,
STRING_AGG(CASE WHEN DATA_TYPE = 'VARCHAR'
THEN QUOTENAME(COLUMN_NAME, '''')
ELSE COLUMN_NAME
END, ',') Columns
FROM INFORMATION_SCHEMA.COLUMNS
GROUP BY TABLE_NAME;
--WHERE TABLE_NAME = 'TableName'
Or
SELECT TABLE_NAME,
STUFF(
(SELECT ',' + CASE WHEN DATA_TYPE = 'VARCHAR'
THEN QUOTENAME(COLUMN_NAME, '''')
ELSE COLUMN_NAME
END
FROM INFORMATION_SCHEMA.COLUMNS T2
WHERE T1.TABLE_NAME = T2.TABLE_NAME
FOR XML PATH('')
), 1, 1, ''
) Columns
FROM INFORMATION_SCHEMA.COLUMNS T1
GROUP BY TABLE_NAME;
UPDATE:
Since you're trying to return GETDATE()
value when the data type is DATETIME
then
SELECT TABLE_NAME,
STUFF(
(SELECT ',' + CASE DATA_TYPE WHEN 'VARCHAR'
THEN QUOTENAME(COLUMN_NAME, '''')
WHEN 'DATETIME'
THEN 'GETDATE()'
ELSE COLUMN_NAME
END
FROM INFORMATION_SCHEMA.COLUMNS T2
WHERE T1.TABLE_NAME = T2.TABLE_NAME
FOR XML PATH('')
), 1, 1, ''
) Columns
FROM INFORMATION_SCHEMA.COLUMNS T1
GROUP BY TABLE_NAME;
Upvotes: 4