Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Использование WITH / 23 сообщений из 23, страница 1 из 1
11.01.2018, 21:58
    #39582857
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование WITH
Здравствуйте!
Есть такой запрос. Он работает
Код: 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.
25.
26.
27.
Use БазаДанных1
Declare @StartDate date ='2017-10-01'


SELECT
	Таблица1.Поле1,
	Таблица1.Поле2,
	Таблица1.Поле3,
	Таблица1.Поле4,
	Таблица1.STARTDATE,
	Таблица1.ENDDATE,	
	Таблица2.Поле5,
	Таблица3.Поле6
FROM
	Таблица1
INNER JOIN
	Таблица2
ON
	Таблица1.Поле1=Таблица2.Поле1
INNER JOIN
	Таблица3
ON
	Таблица2.Поле5 = Таблица3.Поле5
WHERE
	Таблица1.Поле7 =1
	AND
	Таблица1.STARTDATE>=@StartDate


Если этот запрос затолкать в WITH качестве переменной
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Use БазаДанных1
Declare @StartDate date ='2017-10-01'

WITH Таблица AS (
	SELECT
		Таблица1.Поле1,
		Таблица1.Поле2,
		Таблица1.Поле3,
		Таблица1.Поле4,
		Таблица1.STARTDATE,
		Таблица1.ENDDATE,	
		Таблица2.Поле5,
		Таблица3.Поле6
	FROM
		Таблица1
	INNER JOIN
		Таблица2
	ON
		Таблица1.Поле1=Таблица2.Поле1
	INNER JOIN
		Таблица3
	ON
		Таблица2.Поле5 = Таблица3.Поле5
	WHERE
		Таблица1.Поле7 =1
		AND
		Таблица1.STARTDATE>=@StartDate	
	)
	
SELECT
	*
FROM
	Таблица

то пишет "Неправильный синтаксис около ключевого слова "Use"."

Как правильно написать?
...
Рейтинг: 0 / 0
11.01.2018, 22:11
    #39582861
xenix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование WITH
ferzmikk,
Код: sql
1.
2.
3.
4.
5.
6.
Use БазаДанных1
GO

Declare @StartDate date ='2017-10-01';

...
...
Рейтинг: 0 / 0
11.01.2018, 22:11
    #39582862
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование WITH
ferzmikk,

https://docs.microsoft.com/ru-ru/sql/t-sql/queries/with-common-table-expression-transact-sql Если обобщенное табличное выражение используется в инструкции, являющейся частью пакета, то за инструкцией, стоящей перед ней, должен следовать символ точки с запятой.
...
Рейтинг: 0 / 0
11.01.2018, 22:16
    #39582866
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование WITH
Спасибо!
...
Рейтинг: 0 / 0
12.01.2018, 07:48
    #39582973
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование WITH
А вот случай с двумя WITH
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Use БазаДанных1

GO

Declare @StartDate date ='2017-01-01';

WITH Таблица AS (
	...	
	)
	
GO

WITH ЕщеТаблица AS (
	...
       )
	
Select * FROM ЕщеТаблица


Результат выгрузился. Но выдает сообщение "Неправильный синтаксис около конструкции ")"." Перед GO WITH ЕщеТаблица AS выделяет ошибку. Если перед GO WITH ЕщеТаблица AS поставить точку с запятой, то такая же ошибка.

Почему так? Как правильно написать?
...
Рейтинг: 0 / 0
12.01.2018, 07:52
    #39582974
хм-хм
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование WITH
вместо go with поставить запятую
...
Рейтинг: 0 / 0
12.01.2018, 07:55
    #39582975
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование WITH
хм-хмвместо go with поставить запятуюТеперь нормально. Спасибо!
...
Рейтинг: 0 / 0
02.02.2018, 11:02
    #39595465
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование WITH
А если присутствует EXECUTE после WITH, то как надо писать?
...
Рейтинг: 0 / 0
02.02.2018, 11:44
    #39595494
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование WITH
ferzmikkА если присутствует EXECUTE после WITH, то как надо писать?CTE, которое, как известно, начинается с WITH,
является необязательной частью SELECTа, UPDATEа, DELETEа и MERGEа.
При чём тут EXECUTE?
...
Рейтинг: 0 / 0
02.02.2018, 13:19
    #39595566
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование WITH
Такой SQL-запрос совместимый с R
Код: 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.
25.
26.
27.
28.
29.
30.
31.
Use БазаДанных1
GO

Declare @Таблица table(
	[Поле1] varchar(6),
	[Поле2] integer
)
;
INSERT INTO
  @Таблица 
VALUES 
('Первый',1),
('Второй',2),
('Третий',3)
;

With Таблица2 AS (
	SELECT
		[Поле1],
		[Поле2],
		[Поле2]+10 AS [Поле3]
	FROM
		@Таблица)
;

EXECUTE sp_execute_external_script
  @language =N'R',
  @script=N'OutputDataSet<-InputDataSet',
  @input_data_1 =N'Таблица1'
  WITH RESULT SETS (([Поле1] varchar(6), [Поле2] integer, [Поле3] integer ));
GO

Выдает ошибку.Сообщение 102, уровень 15, состояние 1, строка 20
Неправильный синтаксис около конструкции ")".
Как тут правильно написать?
...
Рейтинг: 0 / 0
02.02.2018, 13:24
    #39595573
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование WITH
ferzmikk,
никогда не читайте хелп, сразу на форум

https://docs.microsoft.com/en-us/sql/t-sql/queries/with-common-table-expression-transact-sql
авторA CTE must be followed by a single SELECT, INSERT, UPDATE, or DELETE statement that references some or all the CTE columns. A CTE can also be specified in a CREATE VIEW statement as part of the defining SELECT statement of the view.
...
Рейтинг: 0 / 0
05.02.2018, 09:15
    #39596547
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование WITH
Я правильно понимаю, что в EXECUTE нельзя передать табличную переменную?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Declare @Таблица table(
	[Поле1] varchar(6),
	[Поле2] integer
)
;
INSERT INTO
  @Таблица 
VALUES 
('Первый',1),
('Второй',2),
('Третий',3)
;

EXECUTE sp_execute_external_script
  @language =N'R',
  @script=N'OutputDataSet<-InputDataSet',
  @input_data_1 =N'@Таблица'
  WITH RESULT SETS (([Поле1] varchar(6), [Поле2] integer));
GO

...
Рейтинг: 0 / 0
05.02.2018, 09:27
    #39596553
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование WITH
1. А каким боком это к with? Тем, что оно есть в with result sets? Тогда можно еще и хины обсудить - там тоже есть with.
2. Передать табличную переменную в процедуру/функцию вполне можно - в виде экземпляра UDTT.
...
Рейтинг: 0 / 0
05.02.2018, 09:48
    #39596564
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование WITH
invmferzmikk,

https://docs.microsoft.com/ru-ru/sql/t-sql/queries/with-common-table-expression-transact-sql Если обобщенное табличное выражение используется в инструкции, являющейся частью пакета, то за инструкцией, стоящей перед ней, должен следовать символ точки с запятой.

скоро будет обязательным ставить после каждой инструкции ;
...
Рейтинг: 0 / 0
05.02.2018, 10:01
    #39596571
Использование WITH
Ролг Хупинскоро будет обязательным ставить после каждой инструкции ;надеюсь, на первых порах его сделают "условно обязательным", в зависимости от флагов трассировки или уровней совместимости? Иначе, много кода может встать колом....
...
Рейтинг: 0 / 0
05.02.2018, 11:43
    #39596634
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование WITH
Добрый Э - ЭхРолг Хупинскоро будет обязательным ставить после каждой инструкции ;надеюсь, на первых порах его сделают "условно обязательным", в зависимости от флагов трассировки или уровней совместимости? Иначе, много кода может встать колом....Уже очень давно об этом предупредили.
Призывали переписывать.
Так же, как и скобки в TOP().
...
Рейтинг: 0 / 0
05.02.2018, 12:08
    #39596652
Использование WITH
iap,

Кто бы ещё прислушивался ко всему этому....
тут ведь как обычно: "гром не грянет - мужик не перекрестится".... :)
Как всегда разработка до последнего будет использовать старые крепко заученные подходы в создании своего кода.
...
Рейтинг: 0 / 0
05.02.2018, 12:10
    #39596655
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование WITH
ну зная их это очень не скоро....


из злобных была заявка про нумерованные процедуры, дружно искоренили, и вроде ж до сих пор не запрещённые функционал, а там лет и лет :)
...
Рейтинг: 0 / 0
05.02.2018, 13:25
    #39596717
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование WITH
Сон Веры ПавловныПередать табличную переменную в процедуру/функцию вполне можно - в виде экземпляра UDTT.
Написал SQL-запрос так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE TYPE LocationTableType AS TABLE (
	[Поле1] varchar(6),
	[Поле2] integer
);
GO

Declare @Таблица AS LocationTableType
;

INSERT INTO
  @Таблица 
VALUES 
('Первый',1),
('Второй',2),
('Третий',3)
;

DECLARE @SQL varchar(8000)
SET @SQL = 'SELECT * FROM  @Таблица'

EXECUTE (@SQL)

Выдает ошибку - Необходимо объявить табличную переменную "@Таблица".

Что тут не так?
...
Рейтинг: 0 / 0
05.02.2018, 13:29
    #39596722
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование WITH
ferzmikkЧто тут не так?Разные области видимости.
Внутри DSQL внешние переменные неизвестны.
...
Рейтинг: 0 / 0
05.02.2018, 13:32
    #39596723
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование WITH
ferzmikk,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Declare @Таблица AS LocationTableType
;

INSERT INTO
  @Таблица 
VALUES 
('Первый',1),
('Второй',2),
('Третий',3)
;

DECLARE @SQL nvarchar(max)
SET @SQL = N'SELECT * FROM  @Таблица'

--EXECUTE (@SQL)
exec sp_executesql
     @stmt = @sql,
     @params = N'@Таблица LocationTableType READONLY',
     @Таблица = @Таблица 
...
Рейтинг: 0 / 0
05.02.2018, 13:34
    #39596726
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование WITH
ferzmikk,

речь шла о передаче табличной переменной в аргументе процедуры или функции.
Где тут у вас процедура или функция?
Объявленная, замечу, именно с параметром созданного вами типа.
...
Рейтинг: 0 / 0
05.02.2018, 14:16
    #39596769
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование WITH
А вот если так написать
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Declare @Таблица table(
	[Поле1] varchar(6),
	[Поле2] integer
)
;
INSERT INTO
  @Таблица 
VALUES 
('Первый',1),
('Второй',2),
('Третий',3)
;

EXECUTE sp_execute_external_script
  @language =N'R',   
  @params = N'@Таблица LocationTableType READONLY',
  @Таблица = @Таблица,
  @input_data_1 =N'@Таблица',
  @script=N'OutputDataSet<-InputDataSet'
  WITH RESULT SETS (([Поле1] varchar(6), [Поле2] integer));
GO

то выдает ошибкуСообщение 39001, уровень 16, состояние 2, строка 1
Только инструкция SELECT поддерживается для запроса ввода данных в хранимой процедуре "sp_execute_external_script".
Сообщение 11536, уровень 16, состояние 1, строка 14
Не удалось выполнить инструкцию EXECUTE, поскольку в ее предложении WITH RESULT SETS указано 1 результирующих наборов, но во время выполнения инструкция отправила только 0 результирующих наборов.


Если так написать
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Declare @Таблица table(
	[Поле1] varchar(6),
	[Поле2] integer
)
;
INSERT INTO
  @Таблица 
VALUES 
('Первый',1),
('Второй',2),
('Третий',3)
;

EXECUTE sp_execute_external_script
  @language =N'R',   
  @params = N'@Таблица LocationTableType READONLY',
  @Таблица = @Таблица,
  @input_data_1 =N'SELECT * FROM @Таблица',
  @script=N'OutputDataSet<-InputDataSet'
  WITH RESULT SETS (([Поле1] varchar(6), [Поле2] integer));
GO

то выдает такую ошибкуСообщение 8144, уровень 16, состояние 2, строка 0
Для процедуры или функции указано слишком много аргументов.
Сообщение 11536, уровень 16, состояние 1, строка 14
Не удалось выполнить инструкцию EXECUTE, поскольку в ее предложении WITH RESULT SETS указано 1 результирующих наборов, но во время выполнения инструкция отправила только 0 результирующих наборов.
Здесь как надо правильно написать запрос? Порядок аргументов важен?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Использование WITH / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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