(SELECT MIN( hotelsRooms.price) FROM hotelsRooms WHERE hotelsRooms.HotelID = hotels.Id ) as MinPrice
[Tours]
[HotelID] INT NOT NULL
[CityID] INT NOT NULL,
[CountryID] INT NOT NULL,
Гостиница может быть без города, город — без страны? Нет. Нужно удалить поля город и страна, а использовать связанные таблицы.SELECT Hotels.[Name] AS HotelName,
Cities.[Name] AS CityName,
Countrys.[Name] AS CounrtyName,
(SELECT MIN(Price)
FROM HotelsRooms
WHERE (HotelID = Hotels.ID)) AS MinPrice,
Hotels.Rating AS Stars,
Hotels.Line,
Hotels.DistanceToBeach,
Hotels.DistanceToAirport
FROM Hotels
INNER JOIN Cities ON Hotels.City = Cities.ID
INNER JOIN Countrys ON Cities.CountryID = Countrys.ID
WHERE ((@toCity IS NULL) OR (Cities.[Name] = @toCity))
AND ((@toCountry IS NULL) OR (Countrys.[Name] = @toCountry))
SELECT MIN(Price) FROM HotelsRooms WHERE (HotelID = 14)
Потом перенести его вSELECT (SELECT MIN(Price) AS Expr1
FROM HotelsRooms
WHERE (HotelID = 14)) AS Expr1
FROM Hotels
WHERE (Id = 14)
Связать таблицы SELECT (SELECT MIN(Price) AS Expr1
FROM HotelsRooms
WHERE (HotelID = Hotels.Id)) AS MinPrice
FROM Hotels
WHERE (Id = 14)
dbo.
Перед именем поля всегда указывайте из какой таблицы.CountryID
не определено из какой таблицы: уже указанной [Tours]
или из связанной [Cities]
.[Tours]
[HotelID] INT NOT NULL
[CityID] INT NOT NULL,
[CountryID] INT NOT NULL,
Гостиница может быть без города, город — без страны? Нет. Ошибка. NVARCHAR
.Указал - не помогло.Проверьте входное значение.
DECLARE @cityNameTest nvarchar(100)
SET @cityNameTest = N'Название города'
SELECT 1 WHERE @cityName = @cityNameTest
N
перед параметром означает не UNICODE, а функцию, а чём указано в ошибке.Cities.Name
, который влияет на сравнение строк. COLLATE.SELECT @CityID = Id FROM Cities WHERE [Name] = @cityName
IF @CityID IS NULL BEGIN
INSERT Cities([Name]) VALUE (@cityName)
SET @CityID = IDENT_CURRENT('Cities')
END
INSERT [Hotels]
нет поля кода города. IF NOT EXISTS (SELECT * FROM [Myserver\my_instance].Special_table.dbo.stat WHERE ([my_col1] = @var1) AND ([my_col2] = @var2))
SELECT [Transaction ID],
CONVERT(varchar, [RowLog Contents 0]),
CONVERT(varchar, [RowLog Contents 1]),
CONVERT(varchar, [RowLog Contents 2]),
CONVERT(varchar, [RowLog Contents 3]),
CONVERT(varchar, [RowLog Contents 4]),
CONVERT(varchar, [RowLog Contents 5])
FROM sys.fn_dblog (NULL, NULL)
WHERE operation = 'LOP_INSERT_ROWS'
Работает. А у вас?Для каждого типа транзакций используются разные столбцы, для того, чтобы получить нужную вам информацию вы должны точно знать какие столбцы используются для каких транзакций, а сделать это не просто, так, как официальной документации с описанием нет.
Вставленные и удаленные строки хранятся в шестнадцатеричных значениях. Для того, чтобы вытащить данные из этих значений вы должны знать формат хранения, понимать биты состояний, знать общее количество столбцов и так далее.
данные в hex значении мне не понятныВ сети есть описание структур [RowLog Contents 0], например: Forensics или Decoding a Simple Update Statement Within the Tran... и пр.
CONVERT(VARCHAR,[RowLog Contents 0],2)
. SELECT ItemCode,
COUNT(ProjectId) AS [ProjectsCnt],
(SELECT STRING_AGG(IC.ProjectId, ', ')
FROM ItemCodes AS IC WHERE (IC.ItemCode = ItemCodes.ItemCode)) AS [ProjectIds]
FROM ItemCodes
GROUP BY ItemCode
в БД есть строки дубликаты, но их надо вычистить.Сначала надо убрать "грязные" данные. Например,
(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
Вопрос 1 Тут по ссылкеА тут Руководство по блокировке и управлению версиями строк транзакций SQL Server. Лучше читать первоисточник.
каким способом это лучше реализовать (и есть ли еще другие способы)?Да. Таблицы Пользователь - Группа - Роль связаны связью 1-М (внешний ключ). Даю подсказку: пользователю назначается группа по-умолчанию. Оная может иметь ссылку на роль или нет — вам решать своё противоречие: группы нет, но роль должна быть. Если решите, что роль обязательна, то назовите группу так же как роль.
UPDATE PictureProduct
SET Picture =
(SELECT * FROM OPENROWSET(BULK N'C:\1.jpg', SINGLE_BLOB) AS image)
WHERE Id = 6
INSERT INTO PictureProduct (Id, IdProduct, Picture)
SELECT 8, 4, BulkColumn
FROM Openrowset( Bulk 'C:\2.jpeg', Single_Blob) as image
CREATE TRIGGER PersonDelete ON [Person] FOR DELETE AS
BEGIN
SET NOCOUNT ON
-- [dbo].[Variant]
DELETE FROM Variant WHERE (Variant.Kind = 'P') AND (Variant.[Object] IN ( SELECT ID FROM deleted))
-- [dbo].[Internet]
DELETE FROM Internet WHERE (Internet.Kind = 'P') AND (Internet.[Object] IN ( SELECT ID FROM deleted))
END
--
GO
CREATE TRIGGER AttributeValueUpdateDelete ON FilmAttributeValue FOR UPDATE, DELETE AS
BEGIN
SET NOCOUNT ON
UPDATE FilmAttributeGroup
SET Uses = (SELECT COUNT(*) FROM FilmAttributeValue WHERE ([Group] = deleted.[Group]))
FROM FilmAttributeGroup
INNER JOIN deleted ON FilmAttributeGroup.ID = deleted.[Group]
END
--
GO