Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 msdb.dbo.sp_send_dbmail ... "SELECT * FROM simple_view" ... кэширует сообщения?  [new]
rebelion76
Member

Откуда:
Сообщений: 4
Добрый день!

Столкнулся с такой проблемой. Ежедневно по зданию в SQL Agent уходят выборки при помощи msdb.dbo.sp_send_dbmail.
Сегодня получатель обратил мое внимание на то, что уже несколько дней приходит один и тот же результат.

Стал копать, в итоге получилось вот что (все запросы естественно из под одной УЗ, имеющей все необходимые права)
SELECT * FROM [database].[dbo].[simple_view]
- 18000 результатов

exec msdb.dbo.sp_send_dbmail 
@profile_name='<акк>', @recipients = '<получатель>', 
@query= 'SELECT * FROM [database].[dbo].[simple_view]', 
@attach_query_result_as_file=1, @query_attachment_filename='<имя файла>.csv',
@subject='<тема письма>',  @query_result_header=1,  @query_result_separator='	', 
@query_result_no_padding=1, @query_result_width=32767
- 17230 результатов

Сама из себя вьюха ничего не представляет- просто обертка для другой вьюхи.
CREATE VIEW [database].[dbo].[simple_view]
AS
SELECT     [field1] as f1, [field2] as f2
FROM       [another_database].[dbo].[another_simple_view]
WHERE [field1] in (<значение1>,<значение1>)

Причем, если брать этот код вместо селекта из вьюхи, то все ок, число строк совпадает.

В общем думали-думали, кто-то предложил сделать ALTER для simple_view. Сделал, все стало нормально.

Вопрос - что это было и как не допустить в будущем?

P.S. Microsoft SQL Server 2008 R2 (SP2) - 10.50.4276.0 (X64) Feb 8 2013 10:37:00 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

Заранее спасибо.
1 апр 14, 19:43    [15818157]     Ответить | Цитировать Сообщить модератору
 Re: msdb.dbo.sp_send_dbmail ... "SELECT * FROM simple_view" ... кэширует сообщения?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Чудес не бывает. Нет ли в [another_database].[dbo].[another_simple_view]

SELECT * ...


?
1 апр 14, 21:56    [15818679]     Ответить | Цитировать Сообщить модератору
 Re: msdb.dbo.sp_send_dbmail ... "SELECT * FROM simple_view" ... кэширует сообщения?  [new]
rebelion76
Member

Откуда:
Сообщений: 4
Посмотрел, на самом деле там даже не вьюха, а просто таблица в другой базе.

CREATE VIEW [database].[dbo].[simple_view]
AS
SELECT     [field1] as f1, [field2] as f2
FROM       [another_database].[dbo].[simple_table]
WHERE [field1] in (<значение1>,<значение1>)
1 апр 14, 22:04    [15818706]     Ответить | Цитировать Сообщить модератору
 Re: msdb.dbo.sp_send_dbmail ... "SELECT * FROM simple_view" ... кэширует сообщения?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
rebelion76,

Какого типа поле field1, что у него с NULLability и что указано в <значение1> (лучше реальный пример)?
1 апр 14, 22:21    [15818768]     Ответить | Цитировать Сообщить модератору
 Re: msdb.dbo.sp_send_dbmail ... "SELECT * FROM simple_view" ... кэширует сообщения?  [new]
rebelion76
Member

Откуда:
Сообщений: 4
CREATE TABLE [dbo].[Операции](
                [КодПроводки] [int] NOT NULL,
                [Дата1] [date] NULL,
                [Дата2] [date] NOT NULL,
                [Комментарий] [nvarchar](512) NULL,
                [Количество] [numeric](18, 7) NOT NULL,
                [ТипОперации] [smallint] NOT NULL,
                [СостояниеДокумента] [smallint] NOT NULL,
                [КодДокумента] [int] NOT NULL,
                [Документ] [nvarchar](255) NOT NULL,
                [НомерДокумента] [nvarchar](255) NOT NULL,
                [ДатаДокумента] [date] NOT NULL,
                [КодКлиента] [int] NOT NULL,
                [Код1] [int] NOT NULL,
                [Код2] [int] NULL,
                [Это] [bit] NULL,
                [Сумма] [money] NOT NULL,
                [Поле1] [money] NULL,
                [Налог] [money] NULL,
                [Код3] [int] NULL,
                [Номер1] [nvarchar](64) NULL,
                [Дата3] [date] NULL,
                [НомерДата1]  AS (([Номер1]+' от ')+CONVERT([varchar],[Дата3],(104))),
                [Тип1] [smallint] NULL,
                [Номер2] [nvarchar](255) NULL,
CONSTRAINT [PK_Операции] PRIMARY KEY CLUSTERED 
(
                [КодПроводки] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

CREATE VIEW [dbo].[tbl_Operations]
AS
SELECT     [КодПроводки] AS id, [КодКлиента] AS ClientID, [Дата2] AS Date2, [Дата1] AS Date1, 
                      CASE [КодДокумента] WHEN 100 THEN 'тип1' WHEN 101 THEN 'тип2' END AS Type, [Код1] AS ID1,
 [Количество] AS Count,  [Сумма] AS Value, [Номер1] AS Number1, [Код3] AS ID3, [Дата3] AS Date3, [Это] AS Is, [Номер1] AS RealNumber, 
                      [Номер2] AS Number2
FROM         [БазаДанных].[dbo].[Операции]
WHERE     ([КодДокумента] IN (100, 101))
1 апр 14, 22:48    [15818838]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить