Запуск в SQL Server 2017 Developer Edition.
У меня есть простой случай, когда я пытаюсь взять два столбца INT и объединить их в один столбец с именем «NUMVER», разделенный точками с запятой.Хотя я мог бы рефакторировать вещи в приложении, чтобы сделать это по-другому, было бы интересно узнать, если это возможно, чтобы не рефакторинг и изменить синтаксис, чтобы он не вызывал "!"предупреждение в плане выполнения.
Подробности:
Таблица с именем «DOCS» имеет столбцы NUM
и VER
, оба INT
плюс PK:
CREATE TABLE [dbo].[DOCS2](
[DOCS_ID] [int] IDENTITY(1,1) NOT NULL,
[NUM] [int] NOT NULL,
[VER] [int] NOT NULL,
CONSTRAINT [PK_DOCS] PRIMARY KEY CLUSTERED ([DOCS_ID] ASC)
)
GO
Некоторыеданные:
INSERT INTO dbo.DOCS (NUM, VER) VALUES (1,1);
INSERT INTO dbo.DOCS (NUM, VER) VALUES (2,1);
Я хочу выбрать NUM и VER в одном столбце NUMVER с разделителем точки с запятой:
SELECT CAST(NUM AS varchar(20)) + ';' + CAST(VER AS varchar(20)) AS "MENU" FROM DOCS;
Возвращенный результат в порядке, я получаю "1; 1 или«2; 1» и т. Д., Но я получаю предупреждения о плане выполнения:
Преобразование типов в выражении (CONVERT (varchar (20), [mydb]. [Dbo]. [DOCS]. [NUM], 0)) может повлиять на "CardinalityEstimate" при выборе плана запроса, может повлиять преобразование типа в выражении (CONVERT (varchar (20), [mydb]. [Dbo]. [DOCS]. [VER], 0)) "CardinalityEstimate "в выборе плана запроса
Приведенный выше пример является упрощенным примером более сложной, невероятно загруженной таблицы, и если это тривиальное предупреждение, отлично, я буду двигаться дальше, но я бы хотел получить«!» исчезнуть, если это возможно?
Примечание: я не наблюдал проблем с производительностью, я просто проактивен (или, возможно, слишком любопытен и осторожен).
Примечание 2: для ясности я добавил больше подробностей о сценарии, таких как создание таблицы DDL, и добавил несколько операторов вставки.