Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Nvarchar(max)  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
Здравствуйте!

Есть работающий SQL-запрос. Нужно сделать динамическим, чтобы менять периоды MDX-запроса внутри SQL-запроса.
+SQL-запрос
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 = N'...	
	FROM OPENROWSET(
		''MSOLAP'',
		''Provider=MSOLAP.3;...'',
		' + @MDXQUERY + '
				...'

EXEC (@SQLQUERY);
Все равно срезается до 4000 символов. Как можно передать в EXEC переменную, содержащий текст длиной свыше 4000 символов, и не использовать такой вариант EXEC (@SQLQUERY1 + @SQLQUERY2 + @SQLQUERY3), который cоединяет разделенные тексты запроса?
2 июл 18, 14:12    [21536729]     Ответить | Цитировать Сообщить модератору
 Re: Nvarchar(max)  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
ferzmikk, если так?
SET @SQLQUERY = N'...	
	FROM OPENROWSET(
		''MSOLAP'',
		''Provider=MSOLAP.3;...'',
		' + cast(@MDXQUERY as Varchar(MAX)) + '
				...'
2 июл 18, 14:28    [21536777]     Ответить | Цитировать Сообщить модератору
 Re: Nvarchar(max)  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
Пишу так
SET @SQLQUERY = CAST(N'' AS VARCHAR(MAX)) + N' ...'

не помогает
2 июл 18, 14:29    [21536782]     Ответить | Цитировать Сообщить модератору
 Re: Nvarchar(max)  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
Kopelly
ferzmikk, если так?
SET @SQLQUERY = N'...	
	FROM OPENROWSET(
		''MSOLAP'',
		''Provider=MSOLAP.3;...'',
		' + cast(@MDXQUERY as Varchar(MAX)) + '
				...'
Не помогает. Тут не MDX-запрос длинный, а SQL.
2 июл 18, 14:32    [21536801]     Ответить | Цитировать Сообщить модератору
 Re: Nvarchar(max)  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ferzmikk,

ошибка выполнения какая?
2 июл 18, 14:34    [21536807]     Ответить | Цитировать Сообщить модератору
 Re: Nvarchar(max)  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
TaPaK
ошибка выполнения какая?
Срезает. В коде конце такие команды
...
PRINT @MDXQUERY
PRINT @SQLQUERY					
PRINT @DT
EXEC (@SQLQUERY);
PRINT 'Завершено'


К сообщению приложен файл. Размер - 15Kb
2 июл 18, 14:41    [21536829]     Ответить | Цитировать Сообщить модератору
 Re: Nvarchar(max)  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ferzmikk,

для начала
PRINT CAST(@SQLQUERY as TEXT) 
2 июл 18, 14:44    [21536844]     Ответить | Цитировать Сообщить модератору
 Re: Nvarchar(max)  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
TaPaK
ferzmikk,

для начала
PRINT CAST(@SQLQUERY as TEXT) 
Меньше срезал

К сообщению приложен файл. Размер - 15Kb
2 июл 18, 14:49    [21536858]     Ответить | Цитировать Сообщить модератору
 Re: Nvarchar(max)  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ferzmikk,

ну так и смотрите что у вас в 42 строке. Пялится в print не обязательно
2 июл 18, 14:54    [21536882]     Ответить | Цитировать Сообщить модератору
 Re: Nvarchar(max)  [new]
boltnik
Member

Откуда: Калуга/Москва
Сообщений: 144
Так это может print обрезает, смотри через select.
2 июл 18, 14:55    [21536888]     Ответить | Цитировать Сообщить модератору
 Re: Nvarchar(max)  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
boltnik
Так это может print обрезает, смотри через select.
шутки за 300?
2 июл 18, 14:55    [21536892]     Ответить | Цитировать Сообщить модератору
 Re: Nvarchar(max)  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ferzmikk,

так даст целиком, если уж очень хочется весь смотреть, ну или параметры вывода поменяйте в настройке ssms
SELECT CAST('<root><![CDATA[' + @SQLQUERY + ']]></root>' AS XML)
2 июл 18, 14:57    [21536904]     Ответить | Цитировать Сообщить модератору
 Re: Nvarchar(max)  [new]
boltnik
Member

Откуда: Калуга/Москва
Сообщений: 144
TaPaK
шутки за 300?

Отнюдь.

https://docs.microsoft.com/ru-ru/sql/t-sql/language-elements/print-transact-sql?view=sql-server-2017

автор
A message string can be up to 8,000 characters long if it is a non-Unicode string, and 4,000 characters long if it is a Unicode string.Longer strings are truncated. The varchar(max) and nvarchar(max) data types are truncated to data types that are no larger than varchar(8000) and nvarchar(4000).
2 июл 18, 15:01    [21536917]     Ответить | Цитировать Сообщить модератору
 Re: Nvarchar(max)  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
boltnik,

переоценил... шутка за 150 "смотри через select."
2 июл 18, 15:04    [21536921]     Ответить | Цитировать Сообщить модератору
 Re: Nvarchar(max)  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
TaPaK
ну или параметры вывода поменяйте в настройке ssms
В какой именно ветке?
SELECT CAST('<root><![CDATA[' + @SQLQUERY + ']]></root>' AS XML)
Также срезает как Text
2 июл 18, 15:15    [21536949]     Ответить | Цитировать Сообщить модератору
 Re: Nvarchar(max)  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ferzmikk,

а нажать на xml ссылку?

Tools - Query Result - Sql server - Result to grid/text
2 июл 18, 15:17    [21536956]     Ответить | Цитировать Сообщить модератору
 Re: Nvarchar(max)  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
TaPaK
а нажать на xml ссылку?
Нажимал, не полный текст запроса.
Tools - Query Result - Sql server - Result to grid/text
Какой именно параметр менять?
2 июл 18, 15:28    [21536985]     Ответить | Цитировать Сообщить модератору
 Re: Nvarchar(max)  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ferzmikk,

утомляет...

вы уже исправили ошибку в 42 строке?
2 июл 18, 15:34    [21536999]     Ответить | Цитировать Сообщить модератору
 Re: Nvarchar(max)  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
TaPaK,

Да, исправил. Но все равно срезает. Запускал код без EXEC - выгружался.

К сообщению приложен файл. Размер - 10Kb
2 июл 18, 15:59    [21537057]     Ответить | Цитировать Сообщить модератору
 Re: Nvarchar(max)  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ferzmikk,

а почему вы решили что это не весь запрос и вы не формируете кривой запрос с лишним AND?
2 июл 18, 16:00    [21537063]     Ответить | Цитировать Сообщить модератору
 Re: Nvarchar(max)  [new]
aleks222
Member

Откуда:
Сообщений: 983
TaPaK
ferzmikk,

а почему вы решили что это не весь запрос и вы не формируете кривой запрос с лишним AND?


select right(@SQLQUERY, 255)

развеет мрак.
2 июл 18, 16:03    [21537074]     Ответить | Цитировать Сообщить модератору
 Re: Nvarchar(max)  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
aleks222
TaPaK
ferzmikk,

а почему вы решили что это не весь запрос и вы не формируете кривой запрос с лишним AND?


select right(@SQLQUERY, 255)

развеет мрак.
Такое же окончание текста SQL-запроса
2 июл 18, 16:07    [21537083]     Ответить | Цитировать Сообщить модератору
 Re: Nvarchar(max)  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ferzmikk
aleks222
пропущено...


select right(@SQLQUERY, 255)

развеет мрак.
Такое же окончание текста SQL-запроса

и вывод у вас по прежнему не сложился?
2 июл 18, 16:09    [21537090]     Ответить | Цитировать Сообщить модератору
 Re: Nvarchar(max)  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
ferzmikk
Такое же окончание текста SQL-запроса
21537057
2 июл 18, 16:12    [21537100]     Ответить | Цитировать Сообщить модератору
 Re: Nvarchar(max)  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
Заработало когда так написал
SET @MDXQUERY =
		N'''SELECT
			{[Measures].[Отгрузки шт]} ON 0,
			... FROM PROFIT)''';

EXEC (N'...	
	FROM OPENROWSET(
		''MSOLAP'',
		''Provider=MSOLAP.3;...'',
		' + @MDXQUERY + '
				...');

Через переменную не получается
2 июл 18, 16:33    [21537146]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить