Биты и байты.

Биты и байты.

четверг, 19 декабря 2013 г.

Экспресс знакомство с базой SQL SERVER

Что если вам дали задание написать запрос на незнакомой базе? А времени разбираться особо нет, нет ни схемы  ни документации
Иногда спасает запрос, возвращающий семпл данных по каждому столбцу, с его помощью можно быстро определить где какие данные  




DECLARE @FIELD1 VARCHAR(255), @FIELD2 VARCHAR(255),@FIELD3 VARCHAR(255)
DECLARE @SQL nvarchar(4000), @table_name varchar(10)
declare @sample table( field varchar(max))
declare @tabledata table( schemaname varchar(255), tablename varchar(255),columnname varchar(255),  sqlvar varchar(max), val varchar(max))
declare @result nvarchar(4000) set @result = ''

DECLARE m_cursor CURSOR FOR
  select
    s.name, o.name,c.name --,t.name
    from sys.columns            c
        inner join sys.objects  o on c.object_id=o.object_id
       --     inner join sys.systypes t on t.xtype = c.system_type_id
           inner join sys.schemas s on s.schema_id = o.schema_id
       where o.name in ( Ваши таблицы)
        -- and c.name = 'ID'
    order by s.name,o.name,c.column_id

OPEN m_cursor

FETCH NEXT FROM m_cursor
INTO @FIELD1,@FIELD2,@FIELD3

WHILE @@FETCH_STATUS = 0
BEGIN


    SET @SQL = 'declare @sample table( field varchar(max)) ' +
       'declare @result varchar(max) set @result = '''''+
       'insert into @sample  select  distinct top 10 ' +  @FIELD3 +
       ' FROM ' + @FIELD1+'.'+ @FIELD2 +
       ' select @result = @result + ISNULL(field,''NULL'')+'','' from @sample ' +
       ' select '''+@FIELD1+''',''' + @FIELD2+''',''' +@FIELD3+ ''' , @result'

       --select @SQL
       insert into @tabledata(schemaname,tablename,columnname,val)
       exec(@SQL)


       FETCH NEXT FROM m_cursor
       INTO @FIELD1,@FIELD2,@FIELD3

END
CLOSE m_cursor;
DEALLOCATE m_cursor;

select * from @tabledata

Этот запрос поможет отсортировать  таблицы в базе по количеству строк

SELECT sysobjects.Name , sysindexes.Rows FROM sysobjects
INNER JOIN sysindexes ON sysobjects.id = sysindexes.id
WHERE type = 'U'  AND sysindexes.IndId < 2
ORDER BY Rows desc

И напоследок немного смайлов ))))

— Ой, мальчики, мне больше не наливайте — я уже такая, как вам надо!

About