Создать и получить GUID

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Ответить
user19
Сообщения: 4
Зарегистрирован: 16 фев 2018, 13:34

16 фев 2018, 14:17

Господа, прошу помощи. Я немного далек от IT,поэтому если что то не так скажу не пинайте сильно...
Суть дела- коллега попросила подменить ее на время отпуска, я женщине отказать не в силах, согласился, тем более "дел то там на полчаса"©
Суть того что меня просят сделать- вносить информацию в специальную программу. В день порядка 80-100 записей.У коллеги рука набита и у нее действительно получается все сделать быстро (не за пол часа конечно, но все же))- прокликать по многочисленным окошкам, поставить нужные галочки и ввести нужные коды... Вот "чешу репу", я со своими кривыми руками делать это буду весь день.
После предварительного осмотра будующего места работы выяснил:
ПО взаимодействует с БД, которая живет в SQL сервере на этом же ПК. В это ПО вносятся данные по продукции- размеры, вес, материал, марка стали и тп. Дальше там оно че то считает и потом выставляет счета в конце месяца.
В программе этой есть функция экспорт/импорт. Т.к. по большому счету каждый день вносятся одно и тоже, сделал экспорт того что вносилось вчера- в итоге получил файл в формате .dbf
Открыл экселем, там таблица со множеством столбцов-как раз все те галочки и размеры которые и нужно вносить.В столбце изменил дату на текущую пытался обратно импортировать этот файл но эффекта это не дало. Как я понял первый столбец в этом файле - это GUID, который присвоен каждой записи, который создается в БД при внесении данных из ПО. Если я правильно понял то проблема именно в том что при импорте исправленного файла т.к. GUID такой уже есть базе, он просто затирает старые данные новыми. Т.е. мне нужно создать сначала новые GUID, для каждой новой записи в БД, затем получить как то значения этих GUID которые только что внес, вставить эти значения в столбец и попробовать заново импортировать файл и тогда (как я думаю) записи появятся в ПО и мне не нужно будет их забивать в ручную.
Объяснил как смог) Ребят, спасайте.
user19
Сообщения: 4
Зарегистрирован: 16 фев 2018, 13:34

16 фев 2018, 17:14

В БД есть таблица которая называется GUID, как я понимаю в нее нужно добавлять эти айди.
Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

16 фев 2018, 18:25

GUID это глобальный уникальный идентификатор на базе MAC-адреса сетевой карты и текущей метки времени. Он, помимо всего прочего, нужен для регистрации некоторых компонентов Windows. В Windows API есть специальная функция CoCreateGuid(). Программисты пользуются маленькой программой guidgen, которая написана поверх этой API функции и входит в вижуал студию и многие другие средства разработки под Windows. Правда не знаю где можно скачать эту программу отдельно от вижуал студии.
2B OR NOT(2B) = FF
user19
Сообщения: 4
Зарегистрирован: 16 фев 2018, 13:34

16 фев 2018, 18:36

Absurd писал(а):GUID это глобальный уникальный идентификатор на базе MAC-адреса сетевой карты и текущей метки времени. Он, помимо всего прочего, нужен для регистрации некоторых компонентов Windows. В Windows API есть специальная функция CoCreateGuid(). Программисты пользуются маленькой программой guidgen, которая написана поверх этой API функции и входит в вижуал студию и многие другие средства разработки под Windows. Правда не знаю где можно скачать эту программу отдельно от вижуал студии.
Т.е. sql запросом к БД создать GUID невозможно?
Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

16 фев 2018, 20:18

user19 писал(а):Т.е. sql запросом к БД создать GUID невозможно?

Как-то не подумал о такой возможности. В MSSQL есть функция NEWID()

https://social.msdn.microsoft.com/Forum ... getstarted
2B OR NOT(2B) = FF
user19
Сообщения: 4
Зарегистрирован: 16 фев 2018, 13:34

19 фев 2018, 09:55

Absurd писал(а):Как-то не подумал о такой возможности. В MSSQL есть функция NEWID()

https://social.msdn.microsoft.com/Forum ... getstarted

Спасибо за ссылку.
т.е. в моем случае получается:
Есть БД, в ней таблица "MyUniqueTable", в ней столбец NEWID.
Вот так вставляю новый GUID в таблицу MyUniqueTable в столбец NEWID.
INSERT INTO MyUniqueTable VALUES (NEWID(), 'def')
А как вставить к примеру сразу 60 значений? И как потом эти значения получить?
Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

19 фев 2018, 10:54

user19 писал(а):Спасибо за ссылку.
т.е. в моем случае получается:
Есть БД, в ней таблица "MyUniqueTable", в ней столбец NEWID.
Вот так вставляю новый GUID в таблицу MyUniqueTable в столбец NEWID.
INSERT INTO MyUniqueTable VALUES (NEWID(), 'def')
А как вставить к примеру сразу 60 значений? И как потом эти значения получить?
Насколько я понимаю принцип программирования под MSSQL, чтобы вернуть из хранимой процедуры какой-то резалтсет (типа пачки GUID-ов) хранимая процедура должна просто выполнять оператор SELECT. Получается что вам надо создать временную таблицу (они начинаются со знака '#' и существуют только в пределах текущей сессии), FOR-циклом вставить в нее 60 значений, сделать SELECT из этой таблицы и после этого ее дропнуть.
2B OR NOT(2B) = FF
Ответить