Ошибка при запросе секционированной таблицы в SQL Server

Я создал таблицу разделов и пытаюсь запросить раздел, но не могу сделать это в sql server 2016. Может ли кто-нибудь сказать мне, где я ошибаюсь?

CREATE PARTITION FUNCTION [financialStatementPartition](datetime) 
AS RANGE RIGHT FOR VALUES (N'2013-01-01T00:00:00.000', N'2014-01-01T00:00:00.000', 
                           N'2015-01-01T00:00:00.000', N'2016-01-01T00:00:00.000', 
                           N'2017-01-01T00:00:00.000')
GO

Схема таблицы

CREATE TABLE [dbo].[FinancialStatementIds]
(
    [financialCollectionId] [int] NOT NULL,
    [companyId] [int] NOT NULL,
    [dataItemId] [int] NOT NULL,
    [dataItemName] [varchar](200) NULL,
    [dataItemvalue] [decimal](18, 0) NULL,
    [unittypevalue] [int] NULL,
    [fiscalyear] [int] NULL,
    [fiscalquarter] [int] NULL,
    [periodenddate] [datetime] NULL,
    [filingdate] [datetime] NULL,
    [restatementtypename] [varchar](200) NULL,
    [latestforfinancialperiodflag] [bit] NULL,
    [latestfilingforinstanceflag] [bit] NULL,
    [currencyconversionflag] [int] NULL,
    [currencyname] [varchar](200) NULL,
    [periodtypename] [varchar](200) NULL
)

Запрос

SELECT * 
FROM dbo.FinancialStatementIds
WHERE $PARTITION.financialStatementPartition(periodenddate) = '2013-01-01T00:00:00.000'

Ошибка

Ошибка преобразования при преобразовании значения varchar '2013-01-01T00:00:00.000' в тип данных int.


person Tom    schedule 26.10.2017    source источник
comment
Что такое $РАЗДЕЛ?   -  person scaisEdge    schedule 26.10.2017
comment
Это новая встроенная функция для запроса разделенных таблиц.   -  person Tom    schedule 26.10.2017
comment
Причиной сообщения об ошибке, безусловно, является тот факт, что $PARTITION возвращает номер раздела, а «2013-01-01T00:00:00.000» — это не число, верно? ;-) Попробуйте SELECT $PARTITION.financialStatementPartition('2013-01-01T00:00:00.000')вместо этого   -  person Tyron78    schedule 26.10.2017
comment
не работает. получить ошибку Преобразование не удалось при преобразовании даты и/или времени из строки символов.   -  person Tom    schedule 26.10.2017


Ответы (1)


Вместо этого используйте следующий запрос:

SELECT * 
FROM dbo.FinancialStatementIds
WHERE periodenddate = '20130101'

В любом случае, таблица по-прежнему не разбита на разделы должным образом. Вам нужно применить схему разделов, чтобы соединить таблицу и функцию разделов.

person Kamil Nowinski    schedule 26.10.2017
comment
схема разбиения уже есть. Пропустил вставку в пост - person Tom; 26.10.2017
comment
Привет, Камил, насколько мы уверены, что этот запрос запрашивает данные из раздела. Знаете ли вы какой-либо другой способ сделать это? - person Tom; 26.10.2017