Вставьте в две таблицы, получив SCOPE_IDENTITY () первой таблицы из инструкции SELECT третьей таблицы [duplicate]

Локализация сложна. Это действительно сложно. Это не просто "pairs of words" => "Wortpaare", это намного сложнее. Большинство людей забывают, когда они смотрят на gettext и идут «Ух, уродливый» в том, что процесс локализации намного важнее технических деталей реализации. Это потому, что фактические переводчики, как правило, не являются программистами и, вероятно, даже не являются собственными. Это вызывает гораздо больше головных болей, чем вы думаете. gettext действительно старенький, протестирован в битве и имеет за собой огромную инструментальную цепочку, настроенную для поддержки этого процесса. Если вы хотите правильно работать с i18n и l10n, вам нужна мощная система. gettext - это то, что имеет поддержку из широкого спектра инструментов. [*]

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

Затем вам понадобится инструмент для синхронизации извлеченных строк с уже существующими переводами таким образом, чтобы переводы не были потеряны и что, если это возможно, сохраняются только слегка измененные переводы. В gettext это делает msgmerge.

Затем вам нужно добавить дополнительную информацию в строки. Вы хотите иметь возможность группировать их по категориям, «домену» и контексту, вы можете добавить комментарии для переводчика к исходному коду, и вы можете захотеть, чтобы переводчики могли добавлять комментарии к переводам. gettext поддерживает все это.

Далее вы хотите, чтобы формат файла имел хорошую поддержку из множества инструментов, поскольку вы можете отправлять свои файлы в Китай, чтобы перевести их туда. Причина, по которой вы можете отправить их внешним переводчикам, также является причиной того, что вам нужен хороший инструмент для слияния для слияния изменений, поскольку это может быть очень асинхронный процесс. Файлы PO очень хорошо поддерживаются, потому что gettext настолько стар. Существует много открытых и коммерческих инструментов, которые поддерживают процесс локализации на разных уровнях в зависимости от ваших конкретных потребностей.

Не стоит недооценивать задачу локализации, выбирать инструмент, который хорошо подходит для процесса и учиться Это. gettext - отличный инструмент, если, по общему признанию, не самый дружелюбный для новичков.

Для чего это стоит мое расширение gettext для Twig , что делает gettext для PHP еще лучше.

182
задан johnnyRose 5 March 2018 в 22:59
поделиться

1 ответ

Вы можете либо иметь вновь вставленный идентификатор, который выводится на консоль SSMS, например:

INSERT INTO MyTable(Name, Address, PhoneNo)
OUTPUT INSERTED.ID
VALUES ('Yatrix', '1234 Address Stuff', '1112223333')

Вы также можете использовать это, например, C #, когда вам нужно вернуть идентификатор к вашему вызывающему приложению - просто выполните SQL-запрос с помощью .ExecuteScalar() (вместо .ExecuteNonQuery()), чтобы прочитать результат ID назад.

Или, если вы необходимо захватить вновь вставленный ID внутри T-SQL (например, для дальнейшей последующей обработки), вам нужно создать переменную таблицы:

DECLARE @OutputTbl TABLE (ID INT)

INSERT INTO MyTable(Name, Address, PhoneNo)
OUTPUT INSERTED.ID INTO @OutputTbl(ID)
VALUES ('Yatrix', '1234 Address Stuff', '1112223333')

Таким образом, вы можете поместить несколько значений в @OutputTbl и выполнять дальнейшую обработку. Вы также можете использовать «регулярную» временную таблицу (#temp) или даже «настоящую» постоянную таблицу в качестве «целевой цели» здесь.

356
ответ дан marc_s 15 August 2018 в 17:10
поделиться
  • 1
    Ответ здесь для кода был кратким. ExecuteScalar () FTW – Joe Johnston 25 April 2014 в 16:26
  • 2
    Вы можете вставить результат в real persistent table - это очень фантастично, потому что это означает, что вы можете INSERT информацию в таблицах TWO одновременно. – gotqn 6 February 2015 в 10:13
  • 3
    Никогда не используйте @@ IDENTITY, чтобы тянуть сверху. Откажитесь от трудной работы с триггерами и, поскольку они записывают историю изменений, внесенных в одну таблицу, и вставляя их в новую таблицу одновременно @@ IDENTITY начали возвращать значения из таблицы истории. оттуда начинается веселье! Пожалуйста, используйте решение marc_s. пока я пошел с методом @OutputTbl, но меня заинтриговали другие варианты. – Eric Bishard 20 September 2016 в 16:24
  • 4
    OUTPUT INTO является чрезвычайно фантастическим, за исключением того, что «Целевая таблица предложения OUTPUT INTO не может быть с обеих сторон отношения (первичный ключ, внешний ключ)», что для меня составляет около 99% потенциальных вариантов использования. Я предполагаю, что это связано с тем, что предложение OUTPUT может возвращать данные, даже когда транзакция откатывается назад, но это немного раздражает, так сложно вставлять данные в связанные таблицы A и B одним выстрелом. – Robert Calhoun 10 November 2016 в 17:32
  • 5
    @EricBishard SCOPE_IDENTITY() работает лучше для этого. – Derreck Dean 24 January 2018 в 22:06
Другие вопросы по тегам:

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