-- Syntax for CONVERT:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Вопрос 1 Тут по ссылкеА тут Руководство по блокировке и управлению версиями строк транзакций SQL Server. Лучше читать первоисточник.
каким способом это лучше реализовать (и есть ли еще другие способы)?Да. Таблицы Пользователь - Группа - Роль связаны связью 1-М (внешний ключ). Даю подсказку: пользователю назначается группа по-умолчанию. Оная может иметь ссылку на роль или нет — вам решать своё противоречие: группы нет, но роль должна быть. Если решите, что роль обязательна, то назовите группу так же как роль.
SQL создание зависимости с уникальными строками?Поскольку не назван сервер SQL, то общий ответ: сделать ограничение по уникальности.
ALTER TABLE [Подпроекты] ADD CONSTRAINT AK_NAME UNIQUE (id_project, name);
SELECT ID, Name + ' ' + Surname AS LikeName FROM Users WHERE LikeName = 'Ракзин Роман'
SELECT ID, Name + ' ' + Surname AS LikeName FROM Users
WHERE (LikeName LIKE '%Ракзин%') OR (LikeName LIKE '%Роман%')
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
--
GO
CREATE PROCEDURE SearchGrid @P1 VARCHAR(100) = NULL, @P2 VARCHAR(100) = NULL, @P3 VARCHAR(100) = NULL
AS
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]
--
GO