Size: a a a

SqlCom.ru - Стиль жизни SQL

2020 October 06

D

DK in SqlCom.ru - Стиль жизни SQL
Анна
У меня в ту же тему вопрос,  может кто подскажет. Как перенести данные из excel на sql server, если в таблице более 1000 строк. А точнее в чем проблема, у меня 63 тыс. строк, сервер при  insert пропускает только тысячу.  Я уже часть инсертом сделала, но что-то замучалась, есть ли способ вставить все сразу?
Булк инсерт
источник

A

Alex in SqlCom.ru - Стиль жизни SQL
Добрый день.
Столкнулся тут с такой задачкой в SQL Server (2019)
Допустим, есть вот такая строка - json array
["2020-01-01", "2019-02-03", "aaa", "333", "2020-03-04"]

И есть инфа, что из этой строки надо достать элементы с индексами 0,1,4
и положить их в новый массив
["2020-01-01", "2019-02-03", "2020-03-04"]

Можно ли это как-то при помощи json_query сделать, типа
declare @json_array nvarchar(max) = '["2020-01-01", "2019-02-03", "aaa", "333", "2020-03-04"]'
select json_query(@json_array, '$[0],$[1],$[4]')

?
источник

А

Андрей in SqlCom.ru - Стиль жизни SQL
Alex
Добрый день.
Столкнулся тут с такой задачкой в SQL Server (2019)
Допустим, есть вот такая строка - json array
["2020-01-01", "2019-02-03", "aaa", "333", "2020-03-04"]

И есть инфа, что из этой строки надо достать элементы с индексами 0,1,4
и положить их в новый массив
["2020-01-01", "2019-02-03", "2020-03-04"]

Можно ли это как-то при помощи json_query сделать, типа
declare @json_array nvarchar(max) = '["2020-01-01", "2019-02-03", "aaa", "333", "2020-03-04"]'
select json_query(@json_array, '$[0],$[1],$[4]')

?
Не пробовал с номером позиции в JSON, но по названию позиции, данные вытаскиваю таким запросом
Пример:

SELECT ID, FinalizedData, json_extract(FinalizedData,'$."BARCODE"')
FROM Questionaries;
источник

АА

Андрей Агеев... in SqlCom.ru - Стиль жизни SQL
Alex
Добрый день.
Столкнулся тут с такой задачкой в SQL Server (2019)
Допустим, есть вот такая строка - json array
["2020-01-01", "2019-02-03", "aaa", "333", "2020-03-04"]

И есть инфа, что из этой строки надо достать элементы с индексами 0,1,4
и положить их в новый массив
["2020-01-01", "2019-02-03", "2020-03-04"]

Можно ли это как-то при помощи json_query сделать, типа
declare @json_array nvarchar(max) = '["2020-01-01", "2019-02-03", "aaa", "333", "2020-03-04"]'
select json_query(@json_array, '$[0],$[1],$[4]')

?
источник

A

Alex in SqlCom.ru - Стиль жизни SQL
... ссылка на документацию, читая которую, я не нашел того, что спрашиваю тут.) Спасибо)
источник

2_

2flower _ in SqlCom.ru - Стиль жизни SQL
Alex
Добрый день.
Столкнулся тут с такой задачкой в SQL Server (2019)
Допустим, есть вот такая строка - json array
["2020-01-01", "2019-02-03", "aaa", "333", "2020-03-04"]

И есть инфа, что из этой строки надо достать элементы с индексами 0,1,4
и положить их в новый массив
["2020-01-01", "2019-02-03", "2020-03-04"]

Можно ли это как-то при помощи json_query сделать, типа
declare @json_array nvarchar(max) = '["2020-01-01", "2019-02-03", "aaa", "333", "2020-03-04"]'
select json_query(@json_array, '$[0],$[1],$[4]')

?
а в ms sql jsonpath завезли?
в postgresql это просто.
источник

TS

Tim Safari in SqlCom.ru - Стиль жизни SQL
2flower _
а в ms sql jsonpath завезли?
в postgresql это просто.
да, вроде, в 2016... или 2017
источник

2_

2flower _ in SqlCom.ru - Стиль жизни SQL
ну тогда через jsonpath это все и вытаскивать
источник

АА

Андрей Агеев... in SqlCom.ru - Стиль жизни SQL
Alex
... ссылка на документацию, читая которую, я не нашел того, что спрашиваю тут.) Спасибо)
declare @json as nvarchar(max) =
'{"arr": ["2020-01-01", "2019-02-03", "aaa", "333", "2020-03-04"]}';
select * from openjson(@json) with(
x0   varchar(200)   '$.arr[0]',
x1   varchar(200)   '$.arr[1]',
x4   varchar(200)   '$.arr[4]'
) for json path
источник

A

Alex in SqlCom.ru - Стиль жизни SQL
Андрей Агеев
declare @json as nvarchar(max) =
'{"arr": ["2020-01-01", "2019-02-03", "aaa", "333", "2020-03-04"]}';
select * from openjson(@json) with(
x0   varchar(200)   '$.arr[0]',
x1   varchar(200)   '$.arr[1]',
x4   varchar(200)   '$.arr[4]'
) for json path
Нет, это не то, потому что на выходе получается не массив, а объект, пусть и в квадратных скобочках.
источник

A

Alex in SqlCom.ru - Стиль жизни SQL
2flower _
а в ms sql jsonpath завезли?
в postgresql это просто.
А в постгрес вы бы как сделали?
источник

ДЗ

Дмитрий Зайцев... in SqlCom.ru - Стиль жизни SQL
Поищи библиотеки (dll) или напиши сам, загрузишь в сиквел и можешь пользоваться.
источник

ДЗ

Дмитрий Зайцев... in SqlCom.ru - Стиль жизни SQL
Alex
Нет, это не то, потому что на выходе получается не массив, а объект, пусть и в квадратных скобочках.
Погоди, либо я что-то упустил, либо ты путаешь. Массивов нет в sql server без доп модификаций. Тот же json, это просто "текст" и функции, которые с ним работают
источник

YS

Yaroslav Schekin in SqlCom.ru - Стиль жизни SQL
Alex
А в постгрес вы бы как сделали?
Если через JSON Path, то как-то так:
SELECT jsonb_path_query_array('["2020-01-01", "2019-02-03", "aaa", "333", "2020-03-04"]'::jsonb, '$[0, 1, 4]');

Ну и там есть функции для "разворачивания" / "сворачивания" json <-> rows, можно и их использовать, но больше писать.
источник

KT

Konstantin Taranov in SqlCom.ru - Стиль жизни SQL
Yaroslav Schekin
Не "гарантирует" теоретически (это, очевидно, невозможно), просто коллизии UUID-ов практически невероятны. ;)

> как это реализовано в PostgreSQL

Так же. Т.е. это всё стандартные решения (кроме NEWSEQUENTIALID и ему подобных), Microsoft тут ничего не изобрёл, насколько я помню.
я не сторонник холиваров, просто коллизия guid в Oracle 9G практически была достижима на личном опыте в 2011 году, думаю на больших проектах и SQL Server сдасться
источник

A

Arina in SqlCom.ru - Стиль жизни SQL
Подскажите, пожалуйста, identity(1,1) не всегда работает? Я задала такое ограничение в mssql, думала что получу результат столбца,в котором будут значения с 1 и так далее +1, а в итоге у меня начальное значение - какое-то рандомное число
источник

T

Timus in SqlCom.ru - Стиль жизни SQL
Arina
Подскажите, пожалуйста, identity(1,1) не всегда работает? Я задала такое ограничение в mssql, думала что получу результат столбца,в котором будут значения с 1 и так далее +1, а в итоге у меня начальное значение - какое-то рандомное число
всегда работает. данные в таблице до этого были?
источник

YS

Yaroslav Schekin in SqlCom.ru - Стиль жизни SQL
Konstantin Taranov
я не сторонник холиваров, просто коллизия guid в Oracle 9G практически была достижима на личном опыте в 2011 году, думаю на больших проектах и SQL Server сдасться
Это вообще холиварная тема, к сожалению. ;)
См. https://t.me/sqlcom/141557 — но это мог быть и bug (в реализации алгоритма генерации, такое "всплывает" то тут, то там).
Я, впрочем, тоже о таком слышал (обсуждали в моём присутствии, в смысле), но лично не видел.
источник

DI

Dmitriy Ivanov in SqlCom.ru - Стиль жизни SQL
Arina
Подскажите, пожалуйста, identity(1,1) не всегда работает? Я задала такое ограничение в mssql, думала что получу результат столбца,в котором будут значения с 1 и так далее +1, а в итоге у меня начальное значение - какое-то рандомное число
Это не ограничение а счётчик. Сделайте reseed его или truncate table. Начнет считать с начала
источник

A

Arina in SqlCom.ru - Стиль жизни SQL
Timus
всегда работает. данные в таблице до этого были?
Были, но я их удалила
источник