vulbon
7/21/2017 - 3:21 AM

Useful SQL

Useful SQL

DECLARE @TableName SYSNAME = 'TableName'


DECLARE @Result VARCHAR(max) = 'public class ' + @TableName + ' 
{ 
'

SELECT @Result = @Result + ' public ' + columntype + nullablesign
                 + ' ' + columnname + ' { get; set; } 
'
FROM   ( SELECT Replace( col.NAME, ' ', '_' ) ColumnName,
                column_id                     ColumnId,
                CASE typ.NAME
                  WHEN 'bigint' THEN 'long'
                  WHEN 'binary' THEN 'byte[]'
                  WHEN 'bit' THEN 'bool'
                  WHEN 'char' THEN 'string'
                  WHEN 'date' THEN 'DateTime'
                  WHEN 'datetime' THEN 'DateTime'
                  WHEN 'datetime2' THEN 'DateTime'
                  WHEN 'datetimeoffset' THEN 'DateTimeOffset'
                  WHEN 'decimal' THEN 'decimal'
                  WHEN 'float' THEN 'float'
                  WHEN 'image' THEN 'byte[]'
                  WHEN 'int' THEN 'int'
                  WHEN 'money' THEN 'decimal'
                  WHEN 'nchar' THEN 'string'
                  WHEN 'ntext' THEN 'string'
                  WHEN 'numeric' THEN 'decimal'
                  WHEN 'nvarchar' THEN 'string'
                  WHEN 'real' THEN 'double'
                  WHEN 'smalldatetime' THEN 'DateTime'
                  WHEN 'smallint' THEN 'short'
                  WHEN 'smallmoney' THEN 'decimal'
                  WHEN 'text' THEN 'string'
                  WHEN 'time' THEN 'TimeSpan'
                  WHEN 'timestamp' THEN 'DateTime'
                  WHEN 'tinyint' THEN 'byte'
                  WHEN 'uniqueidentifier' THEN 'Guid'
                  WHEN 'varbinary' THEN 'byte[]'
                  WHEN 'varchar' THEN 'string'
                  ELSE 'UNKNOWN_' + typ.NAME
                END                           ColumnType,
                CASE
                  WHEN col.is_nullable = 1 AND
                       typ.NAME IN ( 'bigint', 'bit', 'date', 'datetime',
                                     'datetime2', 'datetimeoffset', 'decimal', 'float',
                                     'int', 'money', 'numeric', 'real',
                                     'smalldatetime', 'smallint', 'smallmoney', 'time',
                                     'tinyint', 'uniqueidentifier' ) THEN '?'
                  ELSE ''
                END                           NullableSign
         FROM   sys.COLUMNS col
                JOIN sys.TYPES typ
                  ON col.system_type_id = typ.system_type_id AND
                     col.user_type_id = typ.user_type_id
         WHERE  object_id = Object_id( @TableName ) ) t
ORDER  BY columnid

SET @Result = @Result + '}'

PRINT @Result 
SELECT t.name                     AS Table_Name,
       c.name                     AS Column_Name,
       p.name                     AS Data_Type,
       p.max_length               AS SIZE,
       Cast(p.PRECISION AS VARCHAR) + '/'
       + Cast(p.scale AS VARCHAR) AS Precision_Scale
FROM   sys.OBJECTS AS t
       join sys.COLUMNS AS c
         ON t.object_id = c.object_id
       join sys.TYPES AS p
         ON c.system_type_id = p.system_type_id
WHERE  t.type_desc = 'USER_TABLE'; 

--==============================

SELECT table_schema,
       table_name,
       column_name,
       ordinal_position,
       column_default,
       data_type,
       character_maximum_length,
       numeric_precision,
       numeric_precision_radix,
       numeric_scale,
       datetime_precision
FROM   information_schema.COLUMNS;