Трудное шиканье синтаксический макрос

  • @@IDENTITY возвраты последнее значение идентификационных данных, сгенерированное для любой таблицы на текущей сессии, через все объемы. необходимо быть осторожными здесь , так как это через объемы. Вы могли получить значение от триггера вместо Вашего текущего оператора.

  • SCOPE_IDENTITY() возвраты последнее значение идентификационных данных, сгенерированное для любой таблицы на текущей сессии и текущей области. Обычно, что Вы хотите использовать .

  • IDENT_CURRENT('tableName') возвраты последнее значение идентификационных данных, сгенерированное для определенной таблицы на любой сессии и любом объеме. Это позволяет Вам определить, от какой таблицы Вы хотите значение, в случае, если два выше не вполне, в чем Вы нуждаетесь ( очень редкий ). Кроме того, как Парень Старбак упомянутый, "Вы могли использовать это, если Вы хотите получить текущее значение ИДЕНТИФИКАЦИОННЫХ ДАННЫХ для таблицы, в которую Вы не вставили запись".

  • OUTPUT пункт INSERT оператор позволит Вам получить доступ к каждой строке, которая была вставлена через тот оператор. Так как это ограничено по объему к определенному оператору, это [еще 1122] простой , чем другие функции выше. Однако это немного [еще 1123] подробный (необходимо будет вставить в табличную переменную / временную таблицу и затем запросить тот), и это дает результаты даже в ошибочном сценарии, где оператор откатывается. Однако если Ваш запрос использует параллельный план выполнения, это только гарантировано метод для получения идентификационных данных (за исключением выключения параллелизма). Однако это выполняется прежде триггеры и не может использоваться для возврата сгенерированных триггером значений.

5
задан R. Martinho Fernandes 17 July 2009 в 10:12
поделиться

1 ответ

Это можно сделать. Вот как:

import Boo.Lang.Compiler.Ast 
import Boo.Lang.PatternMatching 

macro card(name as string): 
    klass = [| 
        class $(ReferenceExpression(name)): 
            def constructor(): 
                Name = $name
    |] 
    klass.Members.Add(card["effect"]) 
    klass.GetConstructor(0).Body.Add(card["effect-ctor"] as Expression) 
    yield klass 

macro effect(eff as ReferenceExpression): 
    card["effect"] = [| 
        class $eff (Effect): 
            pass 
    |] 
    card["effect-ctor"] = [| Effects.Add($(eff)()) |] 

Благодарим Седрика Вивье за ​​помощь мне в группе Google .

6
ответ дан 14 December 2019 в 13:44
поделиться
Другие вопросы по тегам:

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