0

голосов
0

ответ
11

Просмотры

рассчитать по формулам состоят из одной строки и разделены специальным символом

Тест DDL с КТР в качестве (выберите '0001' ID, 1 InputValue, 'Кол-во * 2; Кол-во * 5' Формулы объединение всех выберите '0002' ID, 2 InputValue, 'Кол-во + 4; Кол-во / 5' Формулы) выберите * в Т от КТР --query данных ID, InputValue, формулы 0001, 1, Кол-во * 2; Кол-во * 5 0002, 2, Кол-во + 4; Кол-во / 5 Ожидаемое вызов SomeFunction или SQLQuery получить результат ниже ID, InputValue, Формулы, Qty1, Qty2 0001, 1, Кол-во * 2; Кол-во * 5, 2, 5 0002, 2, Кол-во + 4; Кол-во / 5, 6, 0,4 Логика формула разрезается; InputValue использует первую формулу для расчета поля qty1 InputValue использует вторую формулу для вычисления поля qty2 My Test В настоящее время мое решение заключается в использовании программирования C #, чтобы решить эту проблему, но производительность имеет большую проблему, когда данные более чем 100000, используя (вар сп = Соединение) {cn.Open (); вар Данные = cn.Query (@»с КТР в качестве (выберите '0001' ID, 1 InputValue, 'Кол-во * 2; Кол-во * 5' Формулы объединение всех выберите '0002' ID, 2 InputValue, 'Кол-во + 4; Кол-во / 5' Формулы) выберите * в #T из КТР, выберите * от #T; «); Результат переменная = datas.Select (с => {вар обр = (s.Formulas как строка) .split ( ';'); вар qtyFor = обр [0] .Надеть ( "Кол-во", Convert.ToString (s.InputValue )); вар qty1For = обр [1] .Надеть ( "Кол-во", Convert.ToString (s.InputValue)); вар кол-во = новый DataTable () Вычислить (qtyFor, string.Empty). вар qty1 = новый DataTable () Вычислить (qty1For, string.Empty). возвращает новый {s.ID, s.InputValue, s.Formulas, Кол-во = кол-во, Qty1 = qty1}; }); ЕЫпе (результат); / * Результат: идентификатор InputValue, Формулы, Qty1, Qty2 0001, 1, Кол-во * 2; Кол-во * 5, 2, 5 0002, 2, Кол-во + 4; Кол-во / 5, 6, 0,4 * /} Интернет Тест Ссылка Я знает, что структура таблицы странно, но это старая система, без исходного кода
IT WeiHan
1

голосов
1

ответ
17

Просмотры

C # Выделяют создать метод ToString динамического свойства

У меня есть класс, как показано ниже код: общественный класс MyClass {общественности Int MyProperty1 {получить; задавать; }}, И я надеюсь создать динамический вызов метода ToString общественности статической строки MyProperty1ToString (MyClass о) {вернуться o.MyProperty1.ToString (); } IL MyProperty1ToString: IL_0000: NOP IL_0001: ldarg.0 IL_0002: callvirt UserQuery + MyClass.get_MyProperty1 IL_0007: stloc.0 IL_0008: ldloca.s 00 IL_000A: вызов System.Int32.ToString IL_000F: stloc.1 IL_0010: уш IL_0012 IL_0012: ldloc.1 IL_0013: RET, так что я пытаюсь использовать Emit создать метод, но получить InvalidProgramException ошибки: общеязыковой среды выполнения обнаружила недопустимый программа общественного класса Program {государственной статической силы Main () {вар OBJ = новый MyClass () {MyProperty1 = 123}; вар проп = obj.GetType (). GetProperty (» Выделяют (OpCodes.Stloc); il.Emit (OpCodes.Ldloca_S, 00); il.Emit (OpCodes.Call, toStringMethod); il.Emit (OpCodes.Stloc_1); il.Emit (OpCodes.Br_S, "IL_0012"); il.Emit (OpCodes.Ldloc_1); il.Emit (OpCodes.Ret); вар Invoke = (Func) dynamicMethod.CreateDelegate (TypeOf (Func)); вернуться Invoke; }} Вопрос, как я могу получить испускают данные во время выполнения компилятора сообщение об ошибке? Я понятия не имею, когда только InvalidProgramException Test Link: C # Выделяют создать динамический метод ToString недвижимости | C # компилятор Интернет | .NET Fiddle вар Invoke = (Func) dynamicMethod.CreateDelegate (TypeOf (Func)); вернуться Invoke; }} Вопрос, как я могу получить испускают данные во время выполнения компилятора сообщение об ошибке? Я понятия не имею, когда только InvalidProgramException Test Link: C # Выделяют создать динамический метод ToString недвижимости | C # компилятор Интернет | .NET Fiddle вар Invoke = (Func) dynamicMethod.CreateDelegate (TypeOf (Func)); вернуться Invoke; }} Вопрос, как я могу получить испускают данные во время выполнения компилятора сообщение об ошибке? Я понятия не имею, когда только InvalidProgramException Test Link: C # Выделяют создать динамический метод ToString недвижимости | C # компилятор Интернет | .NET Fiddle
IT WeiHan
0

голосов
0

ответ
19

Просмотры

Why Dapper QueryFirst Core DataReader read to end instead of just doing one read

Исходный код: Чудной / SqlMapper.cs на мастер · StackExchange / Щеголеватый Щеголеватое QueryFirst Ядро Demo с использованием System.Data; используя System.Data.Common; общественный статический класс DapperDemo {общественности статической Т QueryFirstOrDefault (это IDbConnection соединение, строка SQL, селектор Func) {используя (вар CMD = connection.CreateCommand ()) {cmd.CommandText = SQL; используя (вар читатель = cmd.ExecuteReader (CommandBehavior.SequentialAccess | CommandBehavior.SingleResult | CommandBehavior.SingleRow)) {вар данные = (reader.Read () && reader.FieldCount = 0!)? Селектор (считыватель): по умолчанию (Т); в то время как (reader.Read ()) {}, а (reader.NextResult) () {} возврата данных; }}}} Почему Щеголеватый QueryFirst Ядро DataReader прочитал до конца, вместо того, чтобы просто делать один читать? общественный статический класс DapperDemo {общественности статической Т QueryFirstOrDefault (это IDbConnection соединение, строка SQL, селектор Func) {используя (вар CMD = connection.CreateCommand ()) {cmd.CommandText = SQL; используя (вар читатель = cmd.ExecuteReader (CommandBehavior.SequentialAccess | CommandBehavior.SingleResult | CommandBehavior.SingleRow)) {вар данные = (reader.Read () && reader.FieldCount = 0!)? Селектор (считыватель): по умолчанию (Т); // Читаем возвращать данные только один раз; }}}} Func селектор) {используя (вар CMD = connection.CreateCommand ()) {cmd.CommandText = SQL; используя (вар читатель = cmd.ExecuteReader (CommandBehavior.SequentialAccess | CommandBehavior.SingleResult | CommandBehavior.SingleRow)) {вар данные = (reader.Read () && reader.FieldCount = 0!)? Селектор (считыватель): по умолчанию (Т); // Читаем возвращать данные только один раз; }}}} Func селектор) {используя (вар CMD = connection.CreateCommand ()) {cmd.CommandText = SQL; используя (вар читатель = cmd.ExecuteReader (CommandBehavior.SequentialAccess | CommandBehavior.SingleResult | CommandBehavior.SingleRow)) {вар данные = (reader.Read () && reader.FieldCount = 0!)? Селектор (считыватель): по умолчанию (Т); // Читаем возвращать данные только один раз; }}}} // Читаем возвращать данные только один раз; }}}} // Читаем возвращать данные только один раз; }}}}
IT WeiHan
0

голосов
0

ответ
27

Просмотры

Как можно 「CREATE TABLE .. (цв AS (выберите SQL))」 в SQL Server

ниже сценарий может запустить успех. CREATE TABLE T1 (col1 INT, col2 AS col1 * 2) INSERT INTO T1 (col1) VALUES (7) SELECT * FROM T1 --Result: 7,14 dbfiddle Online Demo, но если я надеюсь, как выберите SQL, то он будет получать сообщение об ошибке , например: CREATE TABLE T1 (col1 INT, col2 AS (выберите ххе от otherTable)) INSERT INTO T1 (col1) VALUES (7) SELECT * FROM T1 --Result: Ошибка, подзапросы не допускается в этом контексте. Только скалярные выражения допускаются. Существуют ли какие-либо другие эквивалентные методы в SQL-сервер?
IT WeiHan
2

голосов
3

ответ
57

Просмотры

В этой демонстрации, я должен создать индекс на каждой колонке или только один некластеризованный индекс (индекс Scan, Seek)

Тест DDL: CREATE TABLE TestTable ([col1] VARCHAR (2), [col2] VARCHAR (2), [col3] VARCHAR (2)); INSERT INTO TestTable ([col1], [col2], [col3]) ЗНАЧЕНИЯ ( 'a1', 'b1', 'с1'); example1 (только один Некластеризованный Index): Создание некластеризованного индекса Index_TestTable на TestTable ([col1], [col2], [col3]); выберите [col2], [col3] из TestTable где [col2] = 'b1'; Результат: Index Scan example2 (два индекса Некластеризованных): Создание некластеризованного индекс Index_TestTable на TestTable ([col1], [col2], [col3]); Создание Некластеризованный Index Index_TestTable2 на TestTable ([col2], [col1], [col3]); выберите [col2], [col3] из TestTable где [col2] = 'b1'; Результат: Index Seek Q. Должен ли я создать индекс на каждой колонке или только один индекс? пс. выберите .. где col1, col2, COL3 в столбцы порядка являются случайными.
IT WeiHan
3

голосов
4

ответ
81

Просмотры

сливаться (нуль, «») получить нуль в оракула, получить «» в SQL Server?

версия Oracle: 12.1.0.2.0 SQL версии сервера: 2012 Мой код: выберите COALESCE (нуль, '') из двойного в Oracle возвращает нулевой результат, но выберите COALESCE (нуль, '') в SQL Server возвращает результат в ''. Почему этот результат отличается? Они являются стандарты ANSI, она не должна быть такой же?
IT WeiHan
1

голосов
1

ответ
72

Просмотры

как преобразовать значение столбца как формат high_value ALL_TAB_COLUMNS в

Как преобразовать значение столбца как (Low) формат high_value оракул ALL_TAB_COLUMNS в. какие функции он должен вызвать? Благодарю. пс. Тип high_value является RAW (32) вход: выберите somefuntion ( «xxxooo») с двойной ожидать: 7878786F6F6F я прочитал оракула веб-документа: ALL_TAB_COLUMNS
IT WeiHan
1

голосов
3

ответ
132

Просмотры

Нет `trigger` установить значение столбца по умолчанию из другого столбца в одной таблице

Можно использовать не триггер, чтобы установить значение столбца по умолчанию из другого столбца в одной таблице? Простой демо выглядит следующим образом: DDL: CREATE TABLE temp_T (col1 INT, col2 INT); ALTER TABLE ADD CONSTRAINT temp_T col1_def DEFAULT col2 * 2 col1; INSERT INTO temp_T (col2) ЗНАЧЕНИЯ (7); Я получаю эту ошибку: Msg 128 Level 15 State 1 линия 2 Название «col2» не допускается в данном контексте. Допустимые выражения константа, постоянные выражения, и (в некоторых случаях) переменные. Имена столбцов не допускаются. Я ожидал, что эти значения: col1 col2 ------------ 14 7 Интернет TestDemo
IT WeiHan