как выбрать столбцы как строки?

Я изучил бы C сначала. Я изучил C (и сделал много в C) прежде, чем переместиться в Obj-C. У меня есть многие коллеги, которые никогда не были настоящими программистами C, они запустили с Obj-C и изучили только столько же C по мере необходимости.

Время от времени я вижу, как они решают проблему полностью в Obj-C, иногда приводящем к очень неуклюжие решения. Обычно я тогда заменяю некоторый код Obj-C чистым кодом C (в конце концов, можно смешать их так же как Вам угодно, содержание метода Obj-C может быть полностью, чистый код C). Без любого намерения оскорбить любого программиста Obj-C, существуют решения, которые очень изящны в Obj-C, это решения, которые просто работают (и взгляд) намного лучше благодаря объекты (программирование ООП может сделать сложные программы намного более прекрасными, чем функциональное программирование; полиморфизм, например, является блестящей функцией)... и я действительно как Obj-C (намного больше, чем C++! Я ненавижу синтаксис C++, и некоторые функции языка являются простым излишеством и приводят к плохим шаблонам разработки, по моему скромному мнению); однако, когда я иногда переписываю код Obj-C своих коллег (и я действительно только делаю так, если я думаю, что это абсолютно необходимо), получающийся код обычно на 50% меньше, только 25% потребностей памяти это использовало прежде и приблизительно на 400% быстрее во времени выполнения.

, Что я пытаюсь сказать здесь: Каждый язык имеет свои за и против. C имеет за и против и Obj-C - также. Однако действительно замечательная особенность Obj-C (вот почему мне даже нравится он больше, чем Java) - то, что можно перейти в плоскость C по желанию и назад снова. Почему это - такая замечательная особенность? Поскольку точно так же, как Obj-C фиксирует многие недостатки чистого C, чистый C может зафиксировать некоторые недостатки Obj-C. При смешивании их вместе, Вы примете очень мощную команду.

, Если Вы только изучаете Obj-C и понятия не имеете о C или только знают самые основы его и никогда не пробуемый, как изящно это может решить некоторые типичные проблемы, Вы на самом деле изучили только половину Obj-C. C является фундаментальной частью Obj-C. Способность использовать C в любое время и везде является фундаментальной функцией его.

А типичным примером был некоторый код, который мы использовали, который должен был закодировать данные в base64, но мы не могли пользоваться внешней библиотекой для того (никакой lib OpenSSL). Мы использовали base64 кодер, совершенно записанные классы Какао использования. Это работало хорошо, но когда мы заставили его закодировать 200 МБ двоичных данных, это взяло вечность, и память наверху была недопустима. Я заменил его крошечным, крайним компактным base64 кодером, записанным полностью как одна функция C (я скопировал тело функции в тело метода, метод взял NSData в качестве входа и возвратил NSString, как произведено, однако в функции, все было C). Кодер C был настолько более компактным, он разбил чистый кодер Какао фактором 8 в скорости, и память наверху была также намного меньше. Кодирование/Декодирование данных, игра вокруг с битами и подобными низкоуровневыми задачами являются просто сильными сторонами C.

Другим примером был некоторый код UI, который потянул много графиков. Для того, чтобы хранить данные, необходимые для рисования графиков, мы использовали NSArray's. На самом деле NSMutableArray, так как график был анимирован. Результат: Очень медленная анимация графика. Мы заменили весь NSArray's нормальными массивами C, объекты со структурами (после того, как вся информация о координате графика - ничто, что Вы должны иметь в объектах), доступ перечислителя с простым для циклов, и запустил движущиеся данные между массивами с memcopy вместо того, чтобы брать данные от одного массива до другого, индекса для индекса. Результат: скорость фактором 4. График анимирован гладко, даже в более старых системах PPC.

слабость C - то, что каждая более сложная программа становится ужасной в конечном счете. Хранение C приложения читаемые, расширяемые и управляемые требования большая дисциплина программиста. Много проектов перестали работать, потому что эта дисциплина отсутствует. Obj-C облегчает для Вас структурировать Ваше приложение с помощью классов, наследования, протоколы и так далее. Однако я не использовал бы чистую функциональность C через границы метода, если не необходимо. Я предпочитаю сохранять весь код в приложении Objective C в рамках метода объекта; все остальное побеждает цель приложения OO. Однако в рамках метода я иногда использую чистый C исключительно.

10
задан KM. 16 October 2009 в 20:34
поделиться

5 ответов

Это должно работать для любой таблицы, но в моем примере я просто создаю тестовую. Вам нужно указать имя таблицы в @YourTableName. Кроме того, вам необходимо установить @YourTableWhere, чтобы ограничить результаты одной строкой, иначе результат будет выглядеть странно, когда несколько строк смешаны вместе.

попробуйте следующее:

BEGIN TRY
CREATE TABLE YourTestTable
(RowID       int primary key not null identity(1,1)
,col1        int null
,col2        varchar(30)
,col3        varchar(20)
,col4        money
,StatusValue char(1)
,xyz_123     int
)
INSERT INTO YourTestTable (col1,col2,col3,col4,StatusValue,xyz_123) VALUES (1234,'wow wee!','this is a long test!',1234.56,'A',98765)
INSERT INTO YourTestTable (col1,col2,col3,col4,StatusValue,xyz_123) VALUES (543,'oh no!','short test',0,'I',12)

END TRY BEGIN CATCH END CATCH

select * from YourTestTable


DECLARE @YourTableName   varchar(1000)
DECLARE @YourTableWhere  varchar(1000)
DECLARE @YourQuery       varchar(max)

SET @YourTableName='YourTestTable'
set @YourTableWhere='y.RowID=1'

SELECT
    @YourQuery = STUFF(
                       (SELECT
                            ' UNION '
                            + 'SELECT '''+COLUMN_NAME+''', CONVERT(varchar(max),'+COLUMN_NAME+') FROM '+@YourTableName+' y'+ISNULL('  WHERE '+@YourTableWhere,'')
                            FROM INFORMATION_SCHEMA.COLUMNS
                            WHERE table_name = @YourTableName
                            FOR XML PATH('')
                       ), 1, 7, ''
                      )

PRINT @YourQuery  

EXEC (@YourQuery)

ВЫХОД:

RowID       col1        col2                           col3                 col4                  StatusValue xyz_123
----------- ----------- ------------------------------ -------------------- --------------------- ----------- -----------
1           1234        wow wee!                       this is a long test! 1234.56               A           98765
2           543         oh no!                         short test           0.00                  I           12

SELECT 'RowID', CONVERT(varchar(max),RowID) FROM YourTestTable y  WHERE y.RowID=1 UNION SELECT 'col1', CONVERT(varchar(max),col1) FROM YourTestTable y  WHERE y.RowID=1 UNION SELECT 'col2', CONVERT(varchar(max),col2) FROM YourTestTable y  WHERE y.RowID=1 UNION SELECT 'col3', CONVERT(varchar(max),col3) FROM YourTestTable y  WHERE y.RowID=1 UNION SELECT 'col4', CONVERT(varchar(max),col4) FROM YourTestTable y  WHERE y.RowID=1 UNION SELECT 'StatusValue', CONVERT(varchar(max),StatusValue) FROM YourTestTable y  WHERE y.RowID=1 UNION SELECT 'xyz_123', CONVERT(varchar(max),xyz_123) FROM YourTestTable y  WHERE y.RowID=1

----------- ------------------------
col1        1234
col2        wow wee!
col3        this is a long test!
col4        1234.56
RowID       1
StatusValue A
xyz_123     98765

ИЗМЕНИТЬ

Для совместимости с SQL Server 2000 , вы сможете заменить varchar (max) на varchar (8000) и использовать его вместо запроса SELECT @YourQuery из приведенного выше кода:

SELECT
    @YourQuery=ISNULL(@YourQuery+' UNION ','')
        + 'SELECT '''+COLUMN_NAME+''', CONVERT(varchar(max),'+COLUMN_NAME+') FROM '+@YourTableName+' y'+ISNULL('  WHERE '+@YourTableWhere,'')
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE table_name = @YourTableName
7
ответ дан 4 December 2019 в 01:57
поделиться
select column_name,* from information_schema.columns
 where table_name = 'TheTableName'
order by ordinal_position
2
ответ дан 4 December 2019 в 01:57
поделиться

Мой ответ на этот вопрос будет легче работать с SQL Server 2000, поскольку он не использует функции XML SQL Server 2005.

0
ответ дан 4 December 2019 в 01:57
поделиться

Вы всегда можете сделать что-то вроде этого

SELECT 'Column_Name' AS ColumnName, 
  (SELECT TOP 1 Column_Name FROM Table tbl2 WHERE tbl.ID = tbl2.ID)
FROM Table tbl
0
ответ дан 4 December 2019 в 01:57
поделиться

Вам не очень понятно, как вы представляете свой отчет и с помощью чего вы его создаете. Используете ли вы прямые результаты инструмента запроса для создания своего «отчета»? В этом случае, я думаю, вы пытаетесь забить гвоздь отверткой. Используйте правильный инструмент для работы.

Не следует использовать язык SQL напрямую для настройки данных презентации для создания отчета. Действительно, это глупая идея. Тот факт, что вы можете написать отчет с прямыми операторами SQL, не означает, что вы должны .

Вам действительно следует создавать свой отчет с помощью прикладной программы, которую вы напишите сами, или инструмент создания отчетов, такой как Crystal Reports.

Прикладная программа, написанная вами: Если вы используете объект курсора для запроса базы данных, вы можете просто получить имена столбцов из этого объекта курсора. Проблема решена.

Инструмент создания отчетов: обычно они предоставляют средство для представления динамических данных, которые могут появиться.

В любом случае, я думаю, вам нужно переосмыслить свой подход к этому.

0
ответ дан 4 December 2019 в 01:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: