У нас SQL Server и мы сталкивались с подобными проблемами. Для их решения мы пользовались готовыми продуктами от Redgate, возможно они подойдут и вам.
Сейчай schema compare для SQL Server встроена в VisualStudio 2010.
Да, это базовые основы любого планирования, в том числе и не относящиеся к разработке программных проектов. Естественно и Scrum также использует эти основы. Но, к сожалению, прежде чем дойти до них, большинство руководителей заваливает несколько проектов.
Добавлю, что не менее важным является и выбор критериев, по которым будут определяться приоритеты. В одних проектах главным критерием будет являться производительность, в других пользовательский интерфейс. Если эти критерии выбрать неправильно, то проект ждет та же печальная участь.
Никакой Америки. Просто поиск оптимального решения конкретной задачи.
P.S Коллеги, давайте вопрос известности/неизвестности оператора APPLY оставим вне рамок этой темы, тем более, как показывает статистика, далеко не все, кто применяет TSql, знакомы со всеми его возможностями.
Может быть, но я не ставил целью дать описание оператора, это можно прочитать в MSDN, ссылку я дал.
Просто хотел поделиться с сообществом интересной находкой. Лично я про этот оператор не знал, и он помог мне элегантно решить проблему, которую мы раньше решали неудобно и громоздко.
Если комунибудь из коллег, этот оператор (семейство операторов) поможет решать их задачи, значит я писал этот пост не зря.
Вот, например, решение от abyrvalg я так же считаю интресным, и возму его себе на заметку.
Сгенерировал 1M записей в табличку Deal следующим кодом:
USE Claims
GO
SET NOCOUNT ON
GO
DECLARE @i INT
SET @i = 1
WHILE @i < 1000000
BEGIN
INSERT INTO Deal(CustomerID, NomenclatureID, [Count], DealDate)
SELECT (@i % 3) + 1, (@i % 3) + 1, 250, DateADD(n, -@i, '2010-01-01')
SET @i = @i + 1
END
Результат сравним с результатом kuda78
Если судить по ExecutionPlan, cервер сначала нумерует ВСЕ строки таблицы DEALS и только потом начинает перемножать её с другими таблицами.
Переход от каждого пункта к следующему приходит с опытом. Хорошо применяется эта классика к сравнию чисел с правающей точкой.
1.Сначала ты не знаешь, что нельзя сравнивать числа с плавающей точкой при помощи операци = или !=
2.Потом знаешь, что нельзя сравнивать числа через = или !=, а надо использовать функцию Equals и задвать точность сравнения.
3.Потом ты понимаешь, что иногда таки можно сравнивать числа при помощи операций = или !=
4.Ну а потом ты понимаешь, что помимо того-то существует еще шестьдесять шесть способов добиться сравнения чисел, и все из них практически равноправны.
5.Когда тебя спрашивают «сравнить числа с плавающей точкой», ты быстро перебираешь в уме эти шестьдесять шесть способов, прикидываешь то общее, что в них есть, вздыхаешь и говоришь: «вообще-то, главное — гармония.»
На вопрос обиженных учеников: «а как ее добиться?», ты говоришь: «никогда не сравнивайте числа с плавающей точкой через операцию = или !=».
Сначала ты не знаешь, что нельзя делать то-то
Потом знаешь, что нельзя делать то-то
Потом ты понимаешь, что иногда таки можно делать то-то
Ну а потом ты понимаешь, что помимо того-то существует еще шестьдесять шесть способов добиться желаемого, и все из них практически равноправны.
Когда тебя спрашивают «как мне добиться желаемого», ты быстро перебираешь в уме эти шестьдесять шесть способов, прикидываешь то общее, что в них есть, вздыхаешь и говоришь: «вообще-то, главное — гармония.»
На вопрос обиженных учеников: «а как ее добиться?», ты говоришь: «никогда не делайте то-то».
Сейчай schema compare для SQL Server встроена в VisualStudio 2010.
Добавлю, что не менее важным является и выбор критериев, по которым будут определяться приоритеты. В одних проектах главным критерием будет являться производительность, в других пользовательский интерфейс. Если эти критерии выбрать неправильно, то проект ждет та же печальная участь.
http://technet.microsoft.com/ru-ru/library/ms175156.aspx
P.S Коллеги, давайте вопрос известности/неизвестности оператора APPLY оставим вне рамок этой темы, тем более, как показывает статистика, далеко не все, кто применяет TSql, знакомы со всеми его возможностями.
Просто хотел поделиться с сообществом интересной находкой. Лично я про этот оператор не знал, и он помог мне элегантно решить проблему, которую мы раньше решали неудобно и громоздко.
Если комунибудь из коллег, этот оператор (семейство операторов) поможет решать их задачи, значит я писал этот пост не зря.
Вот, например, решение от abyrvalg я так же считаю интресным, и возму его себе на заметку.
За книжку большое спасибо, на досуге почитаю.
Результат сравним с результатом kuda78
Если судить по ExecutionPlan, cервер сначала нумерует ВСЕ строки таблицы DEALS и только потом начинает перемножать её с другими таблицами.
Большое спасибо, ваш вариент работает быстрее.
1.Сначала ты не знаешь, что нельзя сравнивать числа с плавающей точкой при помощи операци = или !=
2.Потом знаешь, что нельзя сравнивать числа через = или !=, а надо использовать функцию Equals и задвать точность сравнения.
3.Потом ты понимаешь, что иногда таки можно сравнивать числа при помощи операций = или !=
4.Ну а потом ты понимаешь, что помимо того-то существует еще шестьдесять шесть способов добиться сравнения чисел, и все из них практически равноправны.
5.Когда тебя спрашивают «сравнить числа с плавающей точкой», ты быстро перебираешь в уме эти шестьдесять шесть способов, прикидываешь то общее, что в них есть, вздыхаешь и говоришь: «вообще-то, главное — гармония.»
На вопрос обиженных учеников: «а как ее добиться?», ты говоришь: «никогда не сравнивайте числа с плавающей точкой через операцию = или !=».
Сначала ты не знаешь, что нельзя делать то-то
Потом знаешь, что нельзя делать то-то
Потом ты понимаешь, что иногда таки можно делать то-то
Ну а потом ты понимаешь, что помимо того-то существует еще шестьдесять шесть способов добиться желаемого, и все из них практически равноправны.
Когда тебя спрашивают «как мне добиться желаемого», ты быстро перебираешь в уме эти шестьдесять шесть способов, прикидываешь то общее, что в них есть, вздыхаешь и говоришь: «вообще-то, главное — гармония.»
На вопрос обиженных учеников: «а как ее добиться?», ты говоришь: «никогда не делайте то-то».
Классика кун-фу от RSDN