в БД есть строки дубликаты, но их надо вычистить.Сначала надо убрать "грязные" данные. Например,
(5, 50, N'Юрий', 25),
(6, 50, N'Юрий', NULL),
Он должен автоматом почистить БД
WHILE NOT (SELECT TOP (1) COUNT(ACC_ID) FROM People GROUP BY ACC_ID HAVING (COUNT(ACC_ID) > 1)) IS NULL BEGIN
DELETE FROM People
WHERE (USER_ID IN ( SELECT MAX(USER_ID) FROM People GROUP BY ACC_ID HAVING (COUNT(ACC_ID) > 1)))
END
%date:~6,4%-%date:~3,2%-%date:~0,2%
@echo off
echo ------ determine date
forfiles /P backup.logon /C "cmd /c DEL @path" /D -5
SET DT=%date:~6,4%.%date:~3,2%.%date:~0,2%
IF EXIST C:\Tools\backup.logon\%DT%.done GOTO DONE
...
:DONE
echo %DT% %TIME% >> C:\Tools\backup.logon\%DT%.done
echo ------ execution completed
echo %date:~6,4%-%date:~3,2%-%date:~0,2%|clip
В буфер обмена. Вот допустим есть запрос на 200-300 строк с джинами, групиировками и тд.Поступайте так же, как и с исходными текстами программ: разбивайте на меньшие куски используя представления (view) и вычисляемые поля в таблицах. Например, сложный поиск можно разделить на 2 представления: для поиска и результата (сам запрос будет коротким):
SELECT DISTINCT
SearchName.ID,
SearchName.[Year],
SearchName.[Name],
SearchName.WatchDisplay,
SearchName.Icon,
SearchName.AttributeIcon,
SearchName.[Range],
LEFT(SearchName.[Key], 1) AS Kind,
SearchName.UnitID
FROM SearchName INNER JOIN SearchLike ON SearchName.[Key] = SearchLike.[Key]
WHERE ((NOT @P1 IS NULL) AND (SearchLike.Search LIKE '%' + @P1 + '%'))
OR ((NOT @P2 IS NULL) AND (SearchLike.Search LIKE '%' + @P2 + '%'))
OR ((NOT @P3 IS NULL) AND (SearchLike.Search LIKE '%' + @P3 + '%'))
ORDER BY SearchName.[Range]
CREATE VIEW SearchLike
AS
SELECT Film.ID,
ISNULL(CAST(Film.Year AS VARCHAR) + ' ', '') + ISNULL(Head.Name + ' ' + Film.HeadingNumber + ' ', '')
+ ISNULL(Film.Article + ' ', '') + ISNULL(Film.Name + ' ', '') + ISNULL(Film.NameTranslat + ' ', '')
+ ISNULL(Film.Addition + ' ', '') + ISNULL(Film.Country + ' ', '')
+ ISNULL(FilmAttributeGroup.Name + ' ', '') + ISNULL(FilmAttributeValue.Value + ' ', '') AS Search,
Film.[Key]
FROM FilmAttributeValue
INNER JOIN FilmAttribute ON FilmAttributeValue.ID = FilmAttribute.Attribute
INNER JOIN FilmAttributeGroup ON FilmAttributeValue.[Group] = FilmAttributeGroup.ID
RIGHT OUTER JOIN Film ON FilmAttribute.Film = Film.ID
LEFT OUTER JOIN Film AS Head ON Film.Heading = Head.ID
--
UNION
--
SELECT Person,
[Name],
'P' + CAST(Person AS VARCHAR)
FROM PersonNameFormat
WHERE ([Format] > 10) OR ([Format] = 0)
--
GO
CREATE VIEW SearchName
AS
-- Фильмы:
SELECT Film.ID,
FilmNamePower.[Year] AS [Year],
FilmNamePower.NameCommon AS [Name],
Film.WatchDisplay,
Film.Icon,
Film.AttributeIcon,
'0' + Film.[Range] AS [Range],
Film.[Key],
Film.ID AS UnitID
FROM Film INNER JOIN FilmNamePower ON Film.ID = FilmNamePower.ID
--
UNION
-- Персоны:
SELECT ID,
ISNULL(YEAR(BirthDay), 1900),
NameFull,
'',
NoteIcon,
NULL,
'1' + CONVERT(VARCHAR, ISNULL(BirthDay, '19000101'), 112) + [Range],
[Key],
-1
FROM Person
CREATE VIEW FilmNamePower
AS
-- Фильмы:
SELECT Film.ID,
Film.[Range],
Film.[Range] AS [RangeSort],
ISNULL(Film.[Year], 1895) AS [Year],
Film.TitleCountry AS NameCommon,
Film.TitleYearCountry AS NameYearCountry,
Film.TitleBase AS NameBase,
Film.SearchValue,
Film.Icon,
Film.AttributeIcon,
Film.LastWatch,
Film.WatchDisplay,
Film.ID AS IDCover
FROM Film
WHERE (Heading IS NULL)
-- Многосерийные фильмы и сериалы:
UNION
--
SELECT Film.ID,
Head.[Range] + Film.[Range],
Film.[Range],
ISNULL( ISNULL(Film.[Year], Head.[Year]), 1895),
ISNULL(CAST(Head.HeadingName AS VARCHAR(200)), Head.Name) + IIF(Film.HeadingNumber = '','',', ' + Film.HeadingNumber)
+ IIF((Film.TitleBase IS NULL),'' + Film.PartDisplay, ': ' + Film.TitleBase )
+ ISNULL( ' · ' + ISNULL( Film.Country, Head.Country), ''),
ISNULL(CAST(Head.HeadingName AS VARCHAR(200)), Head.Name)
+ ', ' + Film.HeadingNumber +
+ IIF( (Film.TitleBase IS NULL),
Film.PartDisplay + ' · ' + CAST(ISNULL( ISNULL(Film.[Year], Head.[Year]), 1895) AS VARCHAR),
': ' + Film.[TitleYear] )
+ ISNULL( ' · ' + ISNULL( Film.Country, Head.Country), ''),
ISNULL(CAST(Head.HeadingName AS VARCHAR(200)), Head.Name) + IIF(Film.HeadingNumber = '','',', ' + Film.HeadingNumber)
+ IIF((Film.TitleBase IS NULL),'' + Film.PartDisplay, ': ' + Film.TitleBase ),
Head.SearchValue + ISNULL('+s' + RIGHT('00' + CONVERT([varchar], Film.Season), 2), ''),
Film.Icon,
Film.AttributeIcon,
Film.LastWatch,
Film.WatchDisplay,
Head.ID
FROM Film
INNER JOIN Film AS Head ON Film.Heading = Head.ID
WHERE NOT (Film.Heading IS NULL)
--
GO
Но, в Outlook нет возможности создать задачу с чек боксами, при чем саму задачу закрепить в какую-то категорию.Вы понимаете, что это MS Office? Зачем вы пытаетесь заменить простое сложным? Можно написать макрос, который будет считать галочки и устанавливать процент выполнения. А можно просто вложить одну задачу в другую. А про категории — это вообще за гранью — нажать большую кнопку "Выбрать категорию" (естественно с добавлением и неограниченным количеством).
организация хранения различных старых данных, например 5-10 летней давностиЗависит от СУБД. Есть встроенные способы: секционированные таблицы.
Можно ли такое сделать?Можно. Считайте как хотите. Единственно не понятно — что вы проверять собираетесь? Правильно ли компьютер числа складывает?
Эти идентификаторы будут переписываться иногда вручную