Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 очень хочется...  [new]
Student007
Member

Откуда: Санкт-Петербург
Сообщений: 666
1) чтобы синтаксис UPDATE был похож на INSERT
UPDATE mytable (mycolumn1, mycolumn2)
FROM myselect


2) джойнить таблицы по ключам, заданным где-то по-умолчанию, а не писать их каждый раз
SELECT data1,  data2
FROM mytable1
LEFT JOIN mytable2 ON DEFAULT


Что делать?
28 авг 15, 09:39    [18079474]     Ответить | Цитировать Сообщить модератору
 Re: очень хочется...  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
Student007
Что делать?
Написать в Microsoft Connect, а перед написанием поискать там - если такое предложение уже есть, то проголосовать.
28 авг 15, 09:49    [18079529]     Ответить | Цитировать Сообщить модератору
 Re: очень хочется...  [new]
Student007
Member

Откуда: Санкт-Петербург
Сообщений: 666
alexeyvg,

Если мне одному хочется, то это бесполезно.
28 авг 15, 09:52    [18079551]     Ответить | Цитировать Сообщить модератору
 Re: очень хочется...  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
Student007
alexeyvg,

Если мне одному хочется, то это бесполезно.
Да, вот это важно. Если одному хочется, то, наверное, это такая штука, которая неудобна, не нужна, не даст вам каких то профитов. Ну и зачем вам тогда это?

А может, и хорошая вещь, может, вас и поддержат.

Я вот не вижу каких то больших преимуществ при написании
ON DEFAULT
вместо
ON t1.поле = t2.поле

Второй вариант длинее, но зато он общий, всё единообразно. При правильном форматировании сразу видно, что подсоединяется, и по каким условиям.
28 авг 15, 10:04    [18079605]     Ответить | Цитировать Сообщить модератору
 Re: очень хочется...  [new]
Student007
Member

Откуда: Санкт-Петербург
Сообщений: 666
alexeyvg
Ну и зачем вам тогда это?...Второй вариант длинее, но зато он общий, всё единообразно. При правильном форматировании сразу видно, что подсоединяется, и по каким условиям.


Просто сахар. Когда знаешь структуру вдоль и поперёк, а запрос писать всё равно надо. Жалко время тратить на то, чтобы писать и читать то, что могло где-нибудь подразумеваться и не быть написаным. Implicit vs Explicit, Static vs Dynamic type checking etc.
28 авг 15, 10:15    [18079647]     Ответить | Цитировать Сообщить модератору
 Re: очень хочется...  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Поддерживаю @alexeyvg. А вообще в SQL Server есть более насущные вещи, которые временами не хватает. Например, материализованные CTE:

https://connect.microsoft.com/SQLServer/Feedback/Details/1164604

Поддержки конкатенации строк на уровне встроенных функций. В оконной функции COUNT использовать DISTINCT и тд. Такой список у каждого свой :)
28 авг 15, 10:16    [18079649]     Ответить | Цитировать Сообщить модератору
 Re: очень хочется...  [new]
Student007
Member

Откуда: Санкт-Петербург
Сообщений: 666
AlanDenton
А вообще в SQL Server есть более насущные вещи


Смотря с чьей колокольни =)
28 авг 15, 10:32    [18079747]     Ответить | Цитировать Сообщить модератору
 Re: очень хочется...  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
alexeyvg
Я вот не вижу каких то больших преимуществ при написании
ON DEFAULT
вместо
ON t1.поле = t2.поле
Добавили бы они стандартный NATURAL JOIN.
Глядишь, Student007 почувствовал бы сразу облегчение.
28 авг 15, 10:32    [18079752]     Ответить | Цитировать Сообщить модератору
 Re: очень хочется...  [new]
человек_ниоткуда
Guest
AlanDenton
Поддерживаю @alexeyvg. А вообще в SQL Server есть более насущные вещи, которые временами не хватает. Например, материализованные CTE:

https://connect.microsoft.com/SQLServer/Feedback/Details/1164604

Поддержки конкатенации строк на уровне встроенных функций. В оконной функции COUNT использовать DISTINCT и тд. Такой список у каждого свой :)

Ты хочешь:
SELECT ...
INTO @table_vari
FROM ...

Кстати, буит круто. :)

А я так хочу
SELECT <table_name or join_expr> 
FIELDS <field_list>
WHERE ...
28 авг 15, 10:39    [18079804]     Ответить | Цитировать Сообщить модератору
 Re: очень хочется...  [new]
Student007
Member

Откуда: Санкт-Петербург
Сообщений: 666
iap
NATURAL JOIN


NATURAL - это только INNER с бантиком, малова-то будет.
28 авг 15, 10:41    [18079816]     Ответить | Цитировать Сообщить модератору
 Re: очень хочется...  [new]
Student007
Member

Откуда: Санкт-Петербург
Сообщений: 666
человек_ниоткуда
SELECT ...
INTO @table_vari
FROM ...

Кстати, буит круто. :)

INTO #t мало?

человек_ниоткуда
А я так хочу 
[src]
SELECT <table_name or join_expr> 
FIELDS <field_list>
WHERE ...

В чем профит?
28 авг 15, 10:51    [18079879]     Ответить | Цитировать Сообщить модератору
 Re: очень хочется...  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
AlanDenton
Поддерживаю @alexeyvg. А вообще в SQL Server есть более насущные вещи, которые временами не хватает. Например, материализованные CTE:

https://connect.microsoft.com/SQLServer/Feedback/Details/1164604

Поддержки конкатенации строк на уровне встроенных функций. В оконной функции COUNT использовать DISTINCT и тд. Такой список у каждого свой :)

1) Материализованные CTE - и как вы себе это представляете? Есть VIEW индексируемый.
2) Поддержки конкатенации строк на уровне встроенных функций. - не совсем понятно, вместо имени таблицы подставлять переменную?
3) В оконной функции COUNT использовать DISTINCT - это не оно?
28 авг 15, 11:13    [18080013]     Ответить | Цитировать Сообщить модератору
 Re: очень хочется...  [new]
человек_ниоткуда
Guest
Student007
INTO #t мало?

Непомню приводит-ли к рекомпиляциям INTO #... , но если приводит, собственно вот.
Точно будет удобно, чтоб таблица не маячила после окончания работы пакета/модуля, а убивалась по выходу из них.

Student007
SELECT <table_name or join_expr> 
FIELDS <field_list>
WHERE ...

В чем профит?

Ну вот как программист программисту... что удобного в том, что сначала ты пишешь список свойств а потом список объектов, чьи свойства тебе нужны? Что курили Чемберлин и Бойс когда это придумывали я не понимаю...
"красные, круглые, длинные и помягче, импортный дайте мне кубики, салфетки, булки, стиральный порошок."
28 авг 15, 11:18    [18080045]     Ответить | Цитировать Сообщить модератору
 Re: очень хочется...  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
angel_zar
1) Материализованные CTE - и как вы себе это представляете? Есть VIEW индексируемый.


;WITH cte AS 
(
	SELECT *
	FROM sys.objects o  
)
SELECT * 
FROM cte t1
JOIN cte t2 ON t1.[object_id] = t2.parent_object_id


на плане сколько будет обращений к sys.objects? 1 или 2?

angel_zar
2) Поддержки конкатенации строк на уровне встроенных функций. - не совсем понятно, вместо имени таблицы подставлять переменную?


вместо конкатенации XML и прочими извратами иметь встроенную функцию, как это уже давно сделано в MySQL - GROUP_CONCAT, и Oracle - LISTAGG.

angel_zar
3) В оконной функции COUNT использовать DISTINCT


а Вы попробуйте написать так:

SELECT COUNT(DISTINCT o.[schema_id]) OVER (PARTITION BY o.[type])
FROM sys.objects o


что скажет?
28 авг 15, 11:23    [18080079]     Ответить | Цитировать Сообщить модератору
 Re: очень хочется...  [new]
afgm
Member

Откуда:
Сообщений: 587
Student007
SELECT data1,  data2
FROM mytable1
LEFT JOIN mytable2 ON DEFAULT

Если к таблице добавится ещё одно поле, ссылающееся на того же родителя? Какое выбрать? Что будет со старыми запросами?
28 авг 15, 12:03    [18080425]     Ответить | Цитировать Сообщить модератору
 Re: очень хочется...  [new]
afgm
Member

Откуда:
Сообщений: 587
AlanDenton
вместо конкатенации XML и прочими извратами иметь встроенную функцию, как это уже давно сделано в MySQL - GROUP_CONCAT, и Oracle - LISTAGG

И ещё чтобы оно учитывало порядок поступающих данных, а то мы сделали себе CLR-функцию, а её атрибут критичности к порядку не учитывается
PS: Может после 2008 уже исправили
28 авг 15, 12:09    [18080466]     Ответить | Цитировать Сообщить модератору
 Re: очень хочется...  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
AlanDenton,

По 2-3 му убедили

1) Из глобальных есть VIEW, если хотите внутри запроса материализацию используйте временные таблицы или табличные переменные.
Тут бы больше вот это подошло
SELECT ...
INTO @table_vari
FROM ...
28 авг 15, 12:25    [18080570]     Ответить | Цитировать Сообщить модератору
 Re: очень хочется...  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
angel_zar
AlanDenton,

По 2-3 му убедили

1) Из глобальных есть VIEW, если хотите внутри запроса материализацию используйте временные таблицы или табличные переменные.
Тут бы больше вот это подошло
SELECT ...
INTO @table_vari
FROM ...


а мне хотелось бы хинт, просящий материализовать и указать, какие индексы на материализованное создать (есть же Index Spool) и чтобы оптимизатор их учитывал...
28 авг 15, 12:42    [18080734]     Ответить | Цитировать Сообщить модератору
 Re: очень хочется...  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Student007
1) чтобы синтаксис UPDATE был похож на INSERT
UPDATE mytable (mycolumn1, mycolumn2)
FROM myselect



2) джойнить таблицы по ключам, заданным где-то по-умолчанию, а не писать их каждый раз
SELECT data1,  data2
FROM mytable1
LEFT JOIN mytable2 ON DEFAULT



Что делать?
во у людей проблемы.

Во втором случае вам помогут алиасы и интелисэнс. DEFAULT даже дольше писать. Не говоря про эпические проблемы с поддержкой подобного кода, которые возникнут вскорости после начала его использования.
28 авг 15, 13:13    [18080994]     Ответить | Цитировать Сообщить модератору
 Re: очень хочется...  [new]
человек_ниоткуда
Guest
AlanDenton
Поддержки конкатенации строк на уровне встроенных функций. В оконной функции COUNT использовать DISTINCT и тд.

Вот тут лучше б сделали возможность создания пользовательских агрегатных функций. Типа так:
CREATE AGGEGATE FUNCTION <schema + name> 
<function params>
RETURNS @return_variable AS TYPE = <init_stmt>
FOR 
@accumulator_variable as <type>, ...
AS
<sql_stmt>


И будете кокатенацию делать как вам влезет:
CREATE AGGEGATE FUNCTION dbo.StrCat
@InputValue VARCHAR(128)
RETURNS @ResultStr VARCHAR(4000) = ''
AS
SET @ResultStr = @ResultStr + ';' + ISNULL(@InputValue, '');
28 авг 15, 13:14    [18081000]     Ответить | Цитировать Сообщить модератору
 Re: очень хочется...  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Student007
1) чтобы синтаксис UPDATE был похож на INSERT
UPDATE mytable (mycolumn1, mycolumn2)
FROM myselect


2) джойнить таблицы по ключам, заданным где-то по-умолчанию, а не писать их каждый раз
SELECT data1,  data2
FROM mytable1
LEFT JOIN mytable2 ON DEFAULT


Что делать?


Не знаю относится ли это к серверу, скорее к SSMS, вот сюда напиши

https://www.sql.ru/forum/964454/ssmsboost-besplatnyy-add-in-dlya-ssms-dovodka-urovnya-udobstva-ssms-do-reytinga-uh-ty
28 авг 15, 13:20    [18081038]     Ответить | Цитировать Сообщить модератору
 Re: очень хочется...  [new]
afgm
Member

Откуда:
Сообщений: 587
человек_ниоткуда
Вот тут лучше б сделали возможность создания пользовательских агрегатных функций

Насколько часто вы пишите свои (разнообразные) агрегаты?
Почти всё, что встречается в обсуждении по разным сервера, сводится к тому что не хватает склейки.
Вот скорость у такого TSQL-агрегата будет в разы ниже - факт.
28 авг 15, 13:32    [18081118]     Ответить | Цитировать Сообщить модератору
 Re: очень хочется...  [new]
Student007
Member

Откуда: Санкт-Петербург
Сообщений: 666
afgm
Student007
SELECT data1,  data2
FROM mytable1
LEFT JOIN mytable2 ON DEFAULT

Если к таблице добавится ещё одно поле, ссылающееся на того же родителя? Какое выбрать? Что будет со старыми запросами?


Полагаю, что это могло бы настраиваться где-то единовременно, а потом использоваться во всех запросах. Что есть DEFAULT - открытый вопрос. Принципиально то, что он есть. Например, это может быть наличие связки FOREIGN KEY<->PRIMARY KEY, совпадение по названию поля (как NATURAL JOIN) или какой-то другой критерий, записанный в INFORMATION_SCHEMA.
28 авг 15, 14:00    [18081336]     Ответить | Цитировать Сообщить модератору
 Re: очень хочется...  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Student007

Что делать?


Обратитесь к Linq to Sql

Там можно не писать условий JOIN. Она это сделает за вас.

IEnumerable<Album> query =
  from album in myDC.Albums
  let artists = 
    from track in album.Tracks
    from singBy in track.SingBys
    select singBy.Artist
  where artists.Any(artist => artist.ArtistId == 1)
  select album;



Там можно обновлять записи без дополнительных заморочек

//I do my query...

var result = from u in tdc.tblUsers
             where u.UserID == userID
             select u;
//and then I change the values I want to:

foreach (tblUsers u in result)
{
     //change values (and no im not changing the primary key or foreign keys)
}
//then I submit changes

tdc.SubmitChanges();
28 авг 15, 14:05    [18081369]     Ответить | Цитировать Сообщить модератору
 Re: очень хочется...  [new]
Student007
Member

Откуда: Санкт-Петербург
Сообщений: 666
Ruuu
Во втором случае вам помогут алиасы и интелисэнс. DEFAULT даже дольше писать. Не говоря про эпические проблемы с поддержкой подобного кода, которые возникнут вскорости после начала его использования.


Конечно это только подмножество всех возможных джойнов. Но для любой пары таблиц обычно можно сказать, по каким полям они джойнятся. Например, master/detail, справочники и др.. Ну и зачем каждый раз писать очевидные поля для джойна... А поддерживать может быть даже легче, ибо меньше переменных в конечном запросе.
28 авг 15, 14:12    [18081414]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить