powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Nvarchar(max)
18 сообщений из 43, страница 2 из 2
Nvarchar(max)
    #39668435
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk,

21536777
...
Рейтинг: 0 / 0
Nvarchar(max)
    #39668439
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,

"Неправильный синтаксис около конструкции "AND"."
...
Рейтинг: 0 / 0
Nvarchar(max)
    #39668461
demind10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может быть поможет вот эта запись в блоге:
"Когда nvarchar(max) вмещает только nvarchar(4000)"
https://tyaps-asp.livejournal.com/49702.html
...
Рейтинг: 0 / 0
Nvarchar(max)
    #39668464
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
demind10,

То есть, получается надо текст запроса делить на части менее или равно 4000 символов и потом соединять. Верно?
...
Рейтинг: 0 / 0
Nvarchar(max)
    #39668478
demind10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ferzmikk,
Наверное это можно сформулировать и так. Если я правильно понял автора блога, то при конкатенации строк первое слагаемое должно быть нужной нам размерности nvarchar(max).


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SET @MDXQUERY =
		N'''SELECT
			{[Measures].[Отгрузки шт]} ON 0,
			... FROM PROFIT)''';

--Здесь присваиваем что-то меньше nvarchar(4000)
SET @SQLQUERY = N'...	
	FROM OPENROWSET(
		''MSOLAP'',
		''Provider=MSOLAP.3;...'',
		' 
--Здесь первое слагаемое nvarchar(max), а остальные уже могут быть как nvarchar(max), так и меньше
SET @SQLQUERY = @SQLQUERY + @MDXQUERY + '
				...'



Похоже, что такое безобразие получается именно когда мы собираем строку из нескольких кусочков.
...
Рейтинг: 0 / 0
Nvarchar(max)
    #39668481
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
любители гадать всегда найдут зависимоти "первый"/левый

авторIf the result of the concatenation of strings exceeds the limit of 8,000 bytes, the result is truncated. However, if at least one of the strings concatenated is a large value type, truncation does not occur.


+

авторReturns the data type of the argument with the highest precedence.

что ему написали сделать раз 5, а что у тс с руками отсюда не видно
...
Рейтинг: 0 / 0
Nvarchar(max)
    #39668500
demind10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK, спасибо. Когда я с таким столкнулся, не смог найти описание в первоисточнике. Мой косяк.
...
Рейтинг: 0 / 0
Nvarchar(max)
    #39668571
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
demind10ferzmikk,
Наверное это можно сформулировать и так. Если я правильно понял автора блога, то при конкатенации строк первое слагаемое должно быть нужной нам размерности nvarchar(max).


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SET @MDXQUERY =
		N'''SELECT
			{[Measures].[Отгрузки шт]} ON 0,
			... FROM PROFIT)''';

--Здесь присваиваем что-то меньше nvarchar(4000)
SET @SQLQUERY = N'...	
	FROM OPENROWSET(
		''MSOLAP'',
		''Provider=MSOLAP.3;...'',
		' 
--Здесь первое слагаемое nvarchar(max), а остальные уже могут быть как nvarchar(max), так и меньше
SET @SQLQUERY = @SQLQUERY + @MDXQUERY + '
				...'



Похоже, что такое безобразие получается именно когда мы собираем строку из нескольких кусочков.Получилось, спасибо! Минус в том, что запрос на куски надо резать, чтобы потом соедиянть. Как бы это не усложняло при доработке.
...
Рейтинг: 0 / 0
Nvarchar(max)
    #39668799
demind10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ferzmikk,
не надо резать. Беру свои слова обратно.
Можно использовать функцию CAST и привести символьную строку явно к типу nvarchar(max):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
USE [SM]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[StandardMatrixNoveltiesONESFO3] (@DT date) AS

DECLARE @MDXQUERY nvarchar(4000);
DECLARE @SQLQUERY nvarchar(max);

SET @MDXQUERY =
		N'''SELECT
			{[Measures].[Отгрузки шт]} ON 0,
			... FROM PROFIT)''';

SET @SQLQUERY = CAST(N'...	
	FROM OPENROWSET(
		''MSOLAP'',
		''Provider=MSOLAP.3;...'',
		' AS nvarchar(max)) + @MDXQUERY + '
				...'

EXEC (@SQLQUERY);
...
Рейтинг: 0 / 0
Nvarchar(max)
    #39668855
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
demind10,

Спасибо!
...
Рейтинг: 0 / 0
Nvarchar(max)
    #39668861
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данные выгружаются. Теперь пишет такое: Внимание! Максимальная длина ключа - 900 байт. Индекс "i1" имеет максимальную длину 1840 байт. Для некоторых комбинаций больших значений операции вставки или обновления не смогут быть выполнены.

Длину ключа как можно увеличить? Можно ли игнорировать такую ошибку?
...
Рейтинг: 0 / 0
Nvarchar(max)
    #39668870
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikkДанные выгружаются. Теперь пишет такое: Внимание! Максимальная длина ключа - 900 байт. Индекс "i1" имеет максимальную длину 1840 байт. Для некоторых комбинаций больших значений операции вставки или обновления не смогут быть выполнены.

Длину ключа как можно увеличить? Можно ли игнорировать такую ошибку?Никак не увеличить. А игнорировать ошибки вам никто запретить не может.
...
Рейтинг: 0 / 0
Nvarchar(max)
    #39668876
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анекдот почти в темуЭлектрик говорит хозяйке дома:
— Я нашел причину того, почему у вас погас свет, — это короткое замыкание.
— Так удлините его!
...
Рейтинг: 0 / 0
Nvarchar(max)
    #39668880
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посетитель,

)))
...
Рейтинг: 0 / 0
Nvarchar(max)
    #39668887
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начиная, кажется, с SQL Server 2017, максимальная длина ключа некластерного индекса увеличена до 1700 байт, а формальная длина ключа неуникального некластерного индекса до 2600 байт (ключ некаластерного + ключ кластетного)
...
Рейтинг: 0 / 0
Nvarchar(max)
    #39668897
Eleanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex,

C Sql Server 2016 , но ТС со своими 1840 немного не умещается.
...
Рейтинг: 0 / 0
Nvarchar(max)
    #39668905
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EleanormsLex,

C Sql Server 2016 , но ТС со своими 1840 немного не умещается.
2600 то хватит каждому :)
...
Рейтинг: 0 / 0
Nvarchar(max)
    #39668959
Eleanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex,
Ага, "640 килобайт хватит всем" :)

Казалось бы еще не так давно появился Filestream, переход на который можно было рассматривать от 256КВ, мол Sql Server исходно оптимизирован под работу со строками ~100 байт. А тут уже килобайтные ключи не вызывают удивления.
...
Рейтинг: 0 / 0
18 сообщений из 43, страница 2 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Nvarchar(max)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]