Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Microsoft SQL Server

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55

Открыть новую тему     Написать ответ в эту тему

Megard

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MICROSOFT SQL SERVER
 
тема посвящена выяснению ответов на вопросы, касающихся установки, функционирования и использования Microsoft SQL Server; также обсуждаются вопросы, касающиеся использования T-SQL (диалект SQL-языка, используемого в этой версии сервера)
 
популярные ответы на популярные вопросы "где скачать?" и "чем сломать?" можно найти здесь

 
 
Официальная документация:
SQL Server 2005 Books Online (original/english, 135MB, september 2007);
SQL Server 2005 Books Online (перевод/русский, 148MB, январь 2009);
 
 
Официальные обновления:
[для версий, начиная с 9.0.3042] / [полный перечень обновлений / зеркало]
03/06/2007: KB933508 (9.0.3042 > 9.0.3050);
04/03/2007: KB934458 (9.0.3050 > 9.0.3054);
04/03/2007: KB934459 (9.0.3054 > 9.0.3159);
06/28/2007: KB936305 (9.0.3159 > 9.0.3175);
 
 
Альтернативные источники информации:
sql.ru - очень полезный ресурс с говорящим за себя названием; пожалуй, лучший (если не единственный) на просторах ru'нета; кроме форумов есть большая подборка статей, FAQ, и прочее.

Всего записей: 135 | Зарегистр. 13-09-2002 | Отправлено: 11:49 18-07-2003 | Исправлено: niichavo, 16:13 02-04-2010
hawk2hawk



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DenisConqueror
Гы!
Нагляднее, если за плечами пустой рюкзак под названием "Поезд следует до станции 'Пенсия' "
Нам, старикам, уже без разницы, если строка перевалила за 256 символов:
тут бы вспомнить, куда идёшь по коридору(на кухню чаю выпить, к начальству на ковёр или в тубзик на лиПОССАкцию)
 
(по делу):
если мне нужно проупдапить даты по нескольким фамилиям, то как комфортнее их перебрать в запросе(чтобы без оператора OR, а через запятую как-нить)?  
Спасибо.

Всего записей: 493 | Зарегистр. 11-11-2010 | Отправлено: 15:14 26-07-2018 | Исправлено: hawk2hawk, 15:19 26-07-2018
andyzubov

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну варианты я вижу через OR, ну IN и третий, заведите как в моем примере табличную переменную, занесите туда нужные фамилии, заджойните эту таб. переменную по фамилии и телемаркет
 
 
Добавлено:
Третий вариант что-то вроде  
 
SET DATEFORMAT dmy  
 
DECLARE @t1 TABLE (id1 INT, fam VARCHAR(20))  
DECLARE @t2 TABLE (id2 INT, dt DATE)  
DECLARE @find TABLE (fam VARCHAR(20))
 
INSERT INTO @t1 VALUES (1,'Иванов'), (2,'Петров'), (3, 'Сидоров')  
INSERT INTO @t2 VALUES (1, '01.01.2018'), (2, '02.01.2018'), (3, '03.01.2018'), (1, '05.01.2018')  
INSERT INTO @find VALUES ('Иванов'), ('Петров')
 
 
SELECT * FROM @t2 -- выведем значения ДО  
 
UPDATE @t2 SET dt='10.01.2018'  
FROM @t2 t2  
JOIN @t1 t1 ON (t1.id1=t2.id2)  
JOIN @find f ON t1.fam = f.fam
 
SELECT * FROM @t2 -- ПОСЛЕ  
 
Вот заданием фамилии в @find и играемся
 
Добавлено:
Хотя тут конечно вариант с IN читабельнее
 
UPDATE @t2 SET dt='10.01.2018'  
FROM @t2 t2  
JOIN @t1 t1 ON (t1.id1=t2.id2)  
WHERE fam IN ('Иванов','Петров')

Всего записей: 497 | Зарегистр. 02-04-2015 | Отправлено: 15:23 26-07-2018
hawk2hawk



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
andyzubov
Хм... такое ощущение, что вам самому не особо нравится... ))
А если перебрать нужные фамилии в некоем массиве в цикле и через переменную их SET'ить в таблицу?
Иными словами, если в обозримом будущем добавилось несколько пиплов, то тупо их добавить в массив и ву а-ля.

Всего записей: 493 | Зарегистр. 11-11-2010 | Отправлено: 15:44 26-07-2018 | Исправлено: hawk2hawk, 15:48 26-07-2018
andyzubov

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вы просто определитесь чего вы хотите добиться Второй вариант читабельнее, третий перспективнее за счет возможности переделки впоследствии например в хранимую процедуру и передачу ей списка пользователей которых надо обработать в виде табличного параметра.
 
Курсор стоит использовать в самом крайнем случае когда вы уже ничего не можете сделать без него. А то что хотите Вы, ну в чем проблема, заведите не табличную переменную как у меня, а реальную таблицу, а скрипт будет обновлять данные всех людей в нужной таблице.
Т.е никто в перспективе не мешает вам в таблицу скажем UpdatePpl добавить кроме Иванова и Петрова еще и Сидорова, при этом скрипт обновления данных вообще никак не изменится

Всего записей: 497 | Зарегистр. 02-04-2015 | Отправлено: 15:54 26-07-2018
hawk2hawk



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
andyzubov
Добре. Я вас услышал. Перевариваю.

Всего записей: 493 | Зарегистр. 11-11-2010 | Отправлено: 15:56 26-07-2018
Alexzzy

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
hawk2hawk

Цитата:
Нам, старикам, уже без разницы, если строка перевалила за 256 символов:  
тут бы вспомнить, куда идёшь по коридору(на кухню чаю выпить, к начальству на ковёр или в тубзик на лиПОССАкцию)  

Ноотропил помогает.

Всего записей: 1474 | Зарегистр. 10-07-2013 | Отправлено: 23:41 26-07-2018
hawk2hawk



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alexzzy

Цитата:
Ноотропил помогает.

Не-а. У нас же "олд скул". Водчилла по пятницам и пивандос по субботам после баньки
 
to all:
Операция TRUNCATE TABLE с какими идет опциями? Так же, как и DELETE или там жирнее варианты?
Приведите, плиз, примерчик по удалению строк таблицы с отбором по какой-нить колонке.
Спасибо.

Всего записей: 493 | Зарегистр. 11-11-2010 | Отправлено: 07:39 27-07-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
hawk2hawk

Цитата:
с какими идет опциями

https://docs.microsoft.com/ru-ru/sql/t-sql/statements/truncate-table-transact-sql?view=sql-server-2017
 

Цитата:
примерчик по удалению строк таблицы с отбором по какой-нить колонке.  

TRUNCATE чистит всю таблицу (или секцию)
если речь о DELETE, то стандартное DELETE FROM table WHERE condition;
https://docs.microsoft.com/ru-ru/sql/t-sql/statements/delete-transact-sql?view=sql-server-2017

Всего записей: 15605 | Зарегистр. 20-09-2014 | Отправлено: 08:10 27-07-2018
hawk2hawk



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
TRUNCATE чистит всю таблицу (или секцию)

А в чём прикол, что разработчики рекомендуют вместо DELETE использовать TRUNCATE  
?

Всего записей: 493 | Зарегистр. 11-11-2010 | Отправлено: 09:13 27-07-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
hawk2hawk

Цитата:
А в чём прикол

быстрее и меньше нагрузка, так как удаляет все, а не построчно и не запускает триггеры
 
по ссылке же все написано

Всего записей: 15605 | Зарегистр. 20-09-2014 | Отправлено: 09:33 27-07-2018 | Исправлено: Mavrikii, 09:37 27-07-2018
andyzubov

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
если мне не изменяет память то транкейт работает вне контекста транзакции, а delete по любому в лог запишет.
Ну и само собой транкейт подходит только для полного дропа содержимого таблицы, а делит для частичного удаления.

Всего записей: 497 | Зарегистр. 02-04-2015 | Отправлено: 11:13 27-07-2018
hawk2hawk



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
andyzubov
Если дропаем всю таблицу, то зачем вообще трункейт?  
Можно же тупо  
DROP TABLE [dbo].[шмабле]

Всего записей: 493 | Зарегистр. 11-11-2010 | Отправлено: 11:44 27-07-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
hawk2hawk

Цитата:
DROP TABLE

Drop удаляет таблицу, а truncate только содержимое.

Всего записей: 15605 | Зарегистр. 20-09-2014 | Отправлено: 11:51 27-07-2018
andyzubov

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
И кстати, раз уж тут пошли полезные советы, то весьма рекомендую пользоваться не временными таблицами, а табличными переменными.
 
Т.е не create table #tml, а declare @tmp table
Связано это с тем что временных таблицы по факту заводятся в tempdb, а табличные переменные в памяти, что мне кажется с точки зрения временной таблицы как-то правильнее

Всего записей: 497 | Зарегистр. 02-04-2015 | Отправлено: 11:58 27-07-2018
hawk2hawk



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
andyzubov
Скула же усрётся, но никогда память не отдаст взад, а темпДБ может и лежать на жирном ССД(каши не просит)
да/нет?

Всего записей: 493 | Зарегистр. 11-11-2010 | Отправлено: 12:14 27-07-2018 | Исправлено: hawk2hawk, 12:14 27-07-2018
andyzubov

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну вообще MS рекомендует использовать табличные параметры на небольшом объеме записей, до сотни другой, все что больше все же лучше сливать в временные таблицы.
А память, ну как выделили так и скушает Если сами отдали то чего не взять

Всего записей: 497 | Зарегистр. 02-04-2015 | Отправлено: 12:19 27-07-2018
perceptron

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
+ на временные таблицы можно индексы накладывать !
а на табличные переменные ?

Всего записей: 433 | Зарегистр. 23-12-2005 | Отправлено: 13:18 27-07-2018
hawk2hawk



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Люди, а тут есть одинэсники, сидящие на связке SQL2017+1C8.3.12.x?
Какие-нить есть субъективные няшки от реализации данного солюшена?
Меня в первую очередь интересует тюнинг(на сколько всё вкуснее шевелится, шустрее ли отчеты строятся, запросы более оптимально монстрячатся и проч.), чем если сидеть(скажем) на SQL2014+1C8.3.10.x
Если что, толстый клиент(УПП).
Спасибо.

Всего записей: 493 | Зарегистр. 11-11-2010 | Отправлено: 14:01 27-07-2018
andyzubov

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
насколько я помню при объявлении табличной переменной можно сразу индекс создать, потом конечно не добавить

Всего записей: 497 | Зарегистр. 02-04-2015 | Отправлено: 14:06 27-07-2018
perceptron

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
2andyzubov:  
глянул вроде как в SQL 2014 появились  
Unique Clustered Index
Unique NonClusteredIndex
Unique NonClusteredIndex on a clustered index
Non Unique NonClusteredIndex on a clustered index
 
Тут как ты уже верно отметил, на больших объёмах нужно использовать TempTable
 
+ в 2014 появилась опция при создании TempTable
 

Код:
 
CREATE TYPE TableName AS TABLE(
....
 
) WITH ( MEMORY_OPTIMIZED = ON );  
 

Всего записей: 433 | Зарегистр. 23-12-2005 | Отправлено: 14:24 27-07-2018
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Microsoft SQL Server


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru