Случилось так, что у меня слетело время на серверах. стал 2041 год. Исправили.
Но вохник вопрос а что же с БД произошло? много ли записей с датой в будущем теперь у меня? Ответ - не много - около 1000, все исправил.
Но по ходу пьесы наткнулся на интересную вещь. Чисто логически в БД не должно быть записей с CratedOn или ModifiedOn > GETUTCDATE(). А они есть и не где либо, а в системных таблицах.
Для поиска своих записей из 2041 года набросал скрипт
if OBJECT_ID(N'tempdb..#Results') is not null
Drop Table #Results
CREATE TABLE #Results (ColumnName nvarchar(370), Id uniqueidentifier)
SET NOCOUNT ON
DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
SET @TableName = ''
WHILE @TableName IS NOT NULL
BEGIN
SET @ColumnName = ''
SET @TableName =
(
SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
AND OBJECTPROPERTY(
OBJECT_ID(
QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
), 'IsMSShipped'
) = 0
)
WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
BEGIN
SET @ColumnName =
(
SELECT MIN(QUOTENAME(COLUMN_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2)
AND TABLE_NAME = PARSENAME(@TableName, 1)
AND QUOTENAME(COLUMN_NAME) > @ColumnName
And QUOTENAME(COLUMN_NAME) in ('[CreatedOn]', '[ModifiedOn]')
)
IF @ColumnName IS NOT NULL
BEGIN
INSERT INTO #Results
EXEC
(
'SELECT ''' + @TableName + '.' + @ColumnName + ''', Id
FROM ' + @TableName + ' (NOLOCK) ' +
' WHERE ' + @ColumnName + ' > GETUTCDATE() '
)
END
END
END
SELECT ColumnName, Id FROM #Results
После устранения 2041 года остались записи
ColumnName Id
[dbo].[SysPackageSchemaData].[ModifiedOn] 2C172889-10E7-460D-A630-91E20CCC9ED8
[dbo].[SysPackageSqlScript].[ModifiedOn] B2C17845-F2FD-43A9-97DF-946E2D74588C
[dbo].[SysProfileData].[ModifiedOn] 452EB96A-2F2D-4CDC-B244-823DEE7F36EA
[dbo].[SysProfileData].[ModifiedOn] A46E427B-1514-478C-8F1E-A909B7D32B03
[dbo].[SysProfileData].[ModifiedOn] 349014E2-54AB-41C5-8072-9278D1829F5A
[dbo].[SysProfileData].[ModifiedOn] B1B78E04-2D3D-414D-BD1F-565D9D96213E
[dbo].[SysProfileData].[ModifiedOn] 553596E4-06D1-4299-B012-F2098849E271
[dbo].[SysProfileData].[ModifiedOn] D453578C-DB8C-4ECC-918A-26ED068054F4
[dbo].[SysProfileData].[ModifiedOn] 2F316056-B411-4FEF-BBD2-47CC5167320E
[dbo].[SysProfileData].[ModifiedOn] DD200005-1F2F-4891-B3F2-32EF08CEF537
[dbo].[SysProfileData].[ModifiedOn] E80BE419-186B-4AFA-A726-8CFC362DCAB1
[dbo].[SysProfileData].[ModifiedOn] EFE8B4C8-6612-42EB-A39C-2418ACFB532D
Если смотреть конкретно по записям SysProfileData, то там дата текущего часового профиля, а не UTC. Т.е. если в моем запросе заменить GETUTCDATE() на GETDATE(), то скрипт больше не выдает эти записи. На либо баг сохранения данных в БД.
Но не дают покоя эти записи
тут больше похоже на баг в поставке.
Террасофт, что скажите?
И у кого есть такие записи из будущего?
Версия 7.17.1