Это около 7 МБ пространства стека. В визуальной студии вы должны использовать / STACK: ###, ###, чтобы отобразить нужный размер. Если вы действительно хотите получить огромный стек (это может быть хорошей причиной, используя LISP или что-то еще :), даже куча ограничена небольшими ассигнованиями, прежде чем заставить вас использовать VirtualAlloc), вы также можете настроить PE для создания с помощью / LARGEADDRESSAAWARE (компоновщик Visual Studio снова), но этот заголовок PE вашего конфигуратора позволяет вашему скомпилированному двоичному файлу обращаться к полному 4 ГБ 32-битного адресного пространства (если выполняется в WOW64). Если вы построите действительно массивные двоичные файлы, вам также, как правило, нужно будет сконфигурировать / bigobj в качестве дополнительного параметра-линкера.
И если вам все еще нужно больше места, вы можете радикально нарушить соглашение, используя что-то simular to (снова ссылка MSVC ) / merge :, который позволит вам упаковать один раздел в другой, так что вы можете использовать каждый отдельный байт для отдельного разделяемого раздела / данных. Естественно, вам также нужно будет настроить разрешения SECTIONS в файле def или с помощью #pgrama.
Вы хотите изменить ключевые значения. Вы можете сделать это вручную следующим образом:
select a.*
, max(case b.key when 'Name' then b.value end) Name
, max(case b.key when 'DOB' then b.value end) DOB
from TableA a
left join TableB b
on a.id = b.table_a_id
group by a.id
, a.title
, a.date
, a.etc
Приведенный выше запрос будет работать, если у вас есть только один из каждого атрибута для данной записи в Таблице A, в противном случае он даст вам наибольшее значение. Если вам нужно несколько значений, вы можете сгенерировать последовательность для каждого атрибута, как показано в подвыборе с именем B ниже:
select a.ID
, b.Seq
, a.Title
, a.Date
, a.Etc
, max(case b.key when 'Name' then b.value end) Name
, max(case b.key when 'DOB' then b.value end) DOB
from TableA a
left join (select @Seq:=case
when @aid=b.Table_A_ID and @key=b.key
then @Seq + 1
else 1
end Seq
, @aid:=b.Table_A_ID Table_A_ID
, @key:=b.key `Key`
, b.value
from tableB b
order by table_a_id, b.key) b
on a.id = b.table_a_id
group by a.id, a.title, a.date, a.etc, b.Seq;
Это отличается от ответа @ GMB тем, что он возвратит каждый атрибут только один раз с нулями в строках, где для каждого атрибута меньше значений, тогда как решение @ GMB вернет произведение CROSS всех атрибутов для данной строки.
Select a.*,
(select TOP 1 b.DOB from b where b.table_a_id = a.id and b.key = 'dob'),
(select TOP 1 b.ame from b where b.table_a_id = a.id and b.key = 'name')
from a
Вы должны использовать суб-выбор для достижения этих результатов
Это может быть достигнуто с помощью двух JOIN в Таблице B, например:
SELECT
ta.id,
ta.date,
ta.etc,
tb.value Name,
td.value DOB
FROM
tableA ta
INNER JOIN tableB tb ON tb.table_a_id = tb.id AND tb.key = 'Name'
INNER JOIN tableB td ON td.table_a_id = ta.id AND td.key = 'DOB'
В этом запросе будут отображаться только записи, которые имеют имя и DOB в таблице B. Если вы хотите избежать фильтрации этих «неполных» записей, вы можете использовать LEFT JOIN вместо INNER JOIN.