Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Листинг запроса под MSSQL2000  [new]
СТУДЕНТ123
Guest
добрый день товарищи, помогите пожалуйста, в настоящее время отсутствует возможность накотить MSSQL2000.

Задача состоит следующая: необходимо в одном запросе (т.к. он подсовывается в чужой софт) вернуть одной строкой все имена HOSTNAME.

Данную задачу необходимо решить исключительно в одном запросе и без использования переменных.
Для 2005 и старше на скорую руку решил бы так, но 2000 версии не известен PATH(''):

SELECT 
		REPLACE((	SELECT	DISTINCT CAST(S.HOSTNAME AS VARCHAR) + ', ' FROM DBO.SYSPROCESSES AS S
					WHERE	S.LOGIN_TIME < CAST(FLOOR(CAST(GETDATE()+1 AS FLOAT)) AS DATETIME) AND
							S.HOSTNAME != ''
					FOR XML PATH('')
				),' ','') AS COLUM


Проще сделал бы через переменную, но такой вариант не получится подсунуть в сторонний софт т.к. противоречит его некому движку - запрос должен начинаться с SELECT и не должен иметь переменные.

Прошу помощи в листинге первого запроса, его конвертации под 2000 версию, всем откликнувшимся заранее огромное спасибо!
11 ноя 15, 12:46    [18399413]     Ответить | Цитировать Сообщить модератору
 Re: Листинг запроса под MSSQL2000  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Товарщи, ну если нет возможности "накотить MSSQL2000", тогда можно засобачить SQL2012 Express

ЗЫ. А вы получаете высшее образование?
11 ноя 15, 12:51    [18399441]     Ответить | Цитировать Сообщить модератору
 Re: Листинг запроса под MSSQL2000  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8826
СТУДЕНТ123,

так пусть клиент и формирует строку. В 2000 по-другому и не сделать.
11 ноя 15, 12:55    [18399454]     Ответить | Цитировать Сообщить модератору
 Re: Листинг запроса под MSSQL2000  [new]
СТУДЕНТ123
Guest
Владислав Колосов,

Владислав в том то и дело, что клиенту можно подсунуть готовый запрос из которого он статически может получить исключительно значение первой строки в первом столбце (исходника клиента нет, что бы его сделать умнее), проблема в частности в моей безграмотности, не могу переконвертировать выше описанный запрос под 2000.
11 ноя 15, 13:01    [18399496]     Ответить | Цитировать Сообщить модератору
 Re: Листинг запроса под MSSQL2000  [new]
правильный проходящий.
Guest
СТУДЕНТ123,

накОтить, засобачить, примедведить...
ЗакАт, прокАт, скАтка, накАТ...
Куда катится образование...
11 ноя 15, 13:10    [18399548]     Ответить | Цитировать Сообщить модератору
 Re: Листинг запроса под MSSQL2000  [new]
Glory
Member

Откуда:
Сообщений: 104751
СТУДЕНТ123
не могу переконвертировать выше описанный запрос под 2000.

https://www.sql.ru/faq/faq_topic.aspx?fid=130
11 ноя 15, 13:32    [18399752]     Ответить | Цитировать Сообщить модератору
 Re: Листинг запроса под MSSQL2000  [new]
СТУДЕНТ123
Guest
Glory
СТУДЕНТ123
не могу переконвертировать выше описанный запрос под 2000.

https://www.sql.ru/faq/faq_topic.aspx?fid=130


Здравствуйте Glory, первым делом смотрел туда, к сожалению не имею права создавать функцию или процедуры, при этом бы задачу можно было решить значительно быстро, вернув строку в том виде какая мне нужна.

т.е. необходимо именно запросом не используя переменные вернуть одну строку (все HOSTNAME через запятую), только в таком виде можно подсунуть в ПО
11 ноя 15, 13:43    [18399858]     Ответить | Цитировать Сообщить модератору
 Re: Листинг запроса под MSSQL2000  [new]
Glory
Member

Откуда:
Сообщений: 104751
СТУДЕНТ123
Здравствуйте Glory, первым делом смотрел туда, к сожалению не имею права создавать функцию или процедуры, при этом бы задачу можно было решить значительно быстро, вернув строку в том виде какая мне нужна

Как вы тогда собирались что-то подсовывать клиенту ?
11 ноя 15, 13:47    [18399882]     Ответить | Цитировать Сообщить модератору
 Re: Листинг запроса под MSSQL2000  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
СТУДЕНТ123
необходимо именно запросом не используя переменные
А что запрос с переменными уже не запрос? Или запрос из функции не запрос? Их нельзя никуда "подсунуть"?
11 ноя 15, 13:53    [18399952]     Ответить | Цитировать Сообщить модератору
 Re: Листинг запроса под MSSQL2000  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8826
На SQL2000 задача запросом без переменной не имеет решения.
11 ноя 15, 14:05    [18400074]     Ответить | Цитировать Сообщить модератору
 Re: Листинг запроса под MSSQL2000  [new]
СТУДЕНТ123
Guest
Владислав Колосов
На SQL2000 задача запросом без переменной не имеет решения.
Спасибо за разъяснение
11 ноя 15, 14:14    [18400153]     Ответить | Цитировать Сообщить модератору
 Re: Листинг запроса под MSSQL2000  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
Владислав Колосов
На SQL2000 задача запросом без переменной не имеет решения.
У меня нет SQL2000 под рукой проверить, но вроде бы там есть FOR XML RAW?
Такой номер не пройдёт?
select substring(replace(replace((
  SELECT DISTINCT rtrim(S.HOSTNAME) as HOSTNAME
  FROM DBO.SYSPROCESSES AS S
  WHERE	S.LOGIN_TIME < CAST(FLOOR(CAST(GETDATE()+1 AS FLOAT)) AS DATETIME) AND
  		  S.HOSTNAME != ''
  FOR XML RAW
),'<row HOSTNAME="',', '),'"/>',''),3,8000)
11 ноя 15, 14:23    [18400216]     Ответить | Цитировать Сообщить модератору
 Re: Листинг запроса под MSSQL2000  [new]
СТУДЕНТ123
Guest
Serg_77m
Владислав Колосов
На SQL2000 задача запросом без переменной не имеет решения.
У меня нет SQL2000 под рукой проверить, но вроде бы там есть FOR XML RAW?
Такой номер не пройдёт?
select substring(replace(replace((
  SELECT DISTINCT rtrim(S.HOSTNAME) as HOSTNAME
  FROM DBO.SYSPROCESSES AS S
  WHERE	S.LOGIN_TIME < CAST(FLOOR(CAST(GETDATE()+1 AS FLOAT)) AS DATETIME) AND
  		  S.HOSTNAME != ''
  FOR XML RAW
),'<row HOSTNAME="',', '),'"/>',''),3,8000)


Да, есть этот метод, как раз нашел статью, думаю сам справлюсь с листингом, огромное спасибо за решение!
11 ноя 15, 14:28    [18400244]     Ответить | Цитировать Сообщить модератору
 Re: Листинг запроса под MSSQL2000  [new]
o-o
Guest
Владислав Колосов
На SQL2000 задача запросом без переменной не имеет решения.

ну, извращениям нет предела.
можно написать мегапростыню,
соединив столько раз, сколько максимально может быть этих самых хостов.
вот пример для троих.
надо только в сумме каждое слагаемое в isnull обрамить,
а то при меньшем числе хостов, чем соединений, получится NULL

К сообщению приложен файл. Размер - 41Kb
11 ноя 15, 14:45    [18400324]     Ответить | Цитировать Сообщить модератору
 Re: Листинг запроса под MSSQL2000  [new]
o-o
Guest
Serg_77m
Владислав Колосов
На SQL2000 задача запросом без переменной не имеет решения.
У меня нет SQL2000 под рукой проверить, но вроде бы там есть FOR XML RAW?
Такой номер не пройдёт?
select substring(replace(replace((
  SELECT DISTINCT rtrim(S.HOSTNAME) as HOSTNAME
  FROM DBO.SYSPROCESSES AS S
  WHERE	S.LOGIN_TIME < CAST(FLOOR(CAST(GETDATE()+1 AS FLOAT)) AS DATETIME) AND
  		  S.HOSTNAME != ''
  FOR XML RAW
),'<row HOSTNAME="',', '),'"/>',''),3,8000)

да без проблем.
2000-ый выдает
Msg 170, Level 15, State 1, Line 6
Line 6: Incorrect syntax near 'XML'.


К сообщению приложен файл. Размер - 45Kb
11 ноя 15, 14:50    [18400371]     Ответить | Цитировать Сообщить модератору
 Re: Листинг запроса под MSSQL2000  [new]
Glory
Member

Откуда:
Сообщений: 104751
Serg_77m
У меня нет SQL2000 под рукой проверить, но вроде бы там есть FOR XML RAW?
Такой номер не пройдёт?
select substring(replace(replace((
  SELECT DISTINCT rtrim(S.HOSTNAME) as HOSTNAME
  FROM DBO.SYSPROCESSES AS S
  WHERE	S.LOGIN_TIME < CAST(FLOOR(CAST(GETDATE()+1 AS FLOAT)) AS DATETIME) AND
  		  S.HOSTNAME != ''
  FOR XML RAW
),'<row HOSTNAME="',', '),'"/>',''),3,8000)

В SQL2000 нет типа данных XML.
Поэтому все промежуточные манипуляции с запросом FOR XML невозможны.
11 ноя 15, 14:58    [18400433]     Ответить | Цитировать Сообщить модератору
 Re: Листинг запроса под MSSQL2000  [new]
o-o
Guest
вот-вот.
сам запрос
SELECT DISTINCT rtrim(S.spid) as HOSTNAME
  FROM DBO.SYSPROCESSES AS S
  FOR XML RAW

отрабатывает.
но более с результатом сделать ничего нельзя
11 ноя 15, 15:04    [18400480]     Ответить | Цитировать Сообщить модератору
 Re: Листинг запроса под MSSQL2000  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
СТУДЕНТ123
добрый день товарищи, помогите пожалуйста, в настоящее время отсутствует возможность накотить MSSQL2000.

Задача состоит следующая: необходимо в одном запросе (т.к. он подсовывается в чужой софт) вернуть одной строкой все имена HOSTNAME.

Данную задачу необходимо решить исключительно в одном запросе и без использования переменных.
Для 2005 и старше на скорую руку решил бы так, но 2000 версии не известен PATH(''):

SELECT 
		REPLACE((	SELECT	DISTINCT CAST(S.HOSTNAME AS VARCHAR) + ', ' FROM DBO.SYSPROCESSES AS S
					WHERE	S.LOGIN_TIME < CAST(FLOOR(CAST(GETDATE()+1 AS FLOAT)) AS DATETIME) AND
							S.HOSTNAME != ''
					FOR XML PATH('')
				),' ','') AS COLUM


Проще сделал бы через переменную, но такой вариант не получится подсунуть в сторонний софт т.к. противоречит его некому движку - запрос должен начинаться с SELECT и не должен иметь переменные.

Прошу помощи в листинге первого запроса, его конвертации под 2000 версию, всем откликнувшимся заранее огромное спасибо!



фигня какая-то...
и как они/оно это проверяет? в особенности наличие переменных
11 ноя 15, 15:04    [18400485]     Ответить | Цитировать Сообщить модератору
 Re: Листинг запроса под MSSQL2000  [new]
СТУДЕНТ123
Guest
Winnipuh
СТУДЕНТ123
добрый день товарищи, помогите пожалуйста, в настоящее время отсутствует возможность накотить MSSQL2000.

Задача состоит следующая: необходимо в одном запросе (т.к. он подсовывается в чужой софт) вернуть одной строкой все имена HOSTNAME.

Данную задачу необходимо решить исключительно в одном запросе и без использования переменных.
Для 2005 и старше на скорую руку решил бы так, но 2000 версии не известен PATH(''):

SELECT 
		REPLACE((	SELECT	DISTINCT CAST(S.HOSTNAME AS VARCHAR) + ', ' FROM DBO.SYSPROCESSES AS S
					WHERE	S.LOGIN_TIME < CAST(FLOOR(CAST(GETDATE()+1 AS FLOAT)) AS DATETIME) AND
							S.HOSTNAME != ''
					FOR XML PATH('')
				),' ','') AS COLUM


Проще сделал бы через переменную, но такой вариант не получится подсунуть в сторонний софт т.к. противоречит его некому движку - запрос должен начинаться с SELECT и не должен иметь переменные.

Прошу помощи в листинге первого запроса, его конвертации под 2000 версию, всем откликнувшимся заранее огромное спасибо!



фигня какая-то...
и как они/оно это проверяет? в особенности наличие переменных
Наверное проверяется первое слово "select", варианты с переменной в студии отрабатывают, но в ПО нет, более рационального объяснения у меня нет.
11 ноя 15, 15:17    [18400578]     Ответить | Цитировать Сообщить модератору
 Re: Листинг запроса под MSSQL2000  [new]
o-o
Guest
СТУДЕНТ123,

Тогда чем не подошел вариант с функцией?
Select и никаких переменных
11 ноя 15, 15:20    [18400605]     Ответить | Цитировать Сообщить модератору
 Re: Листинг запроса под MSSQL2000  [new]
Glory
Member

Откуда:
Сообщений: 104751
СТУДЕНТ123
варианты с переменной в студии отрабатывают, но в ПО нет

И вы увидели, что ваше ПО отсылает серверу ?
11 ноя 15, 15:22    [18400616]     Ответить | Цитировать Сообщить модератору
 Re: Листинг запроса под MSSQL2000  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
o-o
СТУДЕНТ123,

Тогда чем не подошел вариант с функцией?
Select и никаких переменных


прав пишет нету на создание.

И еще непонятно: так куда запрос собирался всовывать?
11 ноя 15, 15:23    [18400620]     Ответить | Цитировать Сообщить модератору
 Re: Листинг запроса под MSSQL2000  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
СТУДЕНТ123,

CAST(FLOOR(CAST(GETDATE()+1 AS FLOAT)) AS DATETIME)

Сие вообще что ? в 8 были почти все ф-ции для работы с типом datetime
11 ноя 15, 15:24    [18400626]     Ответить | Цитировать Сообщить модератору
 Re: Листинг запроса под MSSQL2000  [new]
Макбет
Member

Откуда:
Сообщений: 72
СТУДЕНТ123,

лови =)
единственный минус - выводит только заранее заложенное число хостов, в данном случае 10
по необходимости легко расширяется, превращаясь в простыню
к сожалению, элегантного решения в рамках MS SQL 2000 мне не известно (без переменных)
select 
	isnull((select rtrim(CAST(S.HOSTNAME AS VARCHAR)) from DBO.SYSPROCESSES S where S.spid = Q3.h1) +',','') +
	isnull((select rtrim(CAST(S.HOSTNAME AS VARCHAR)) from DBO.SYSPROCESSES S where S.spid = Q3.h2) +',','') +
	isnull((select rtrim(CAST(S.HOSTNAME AS VARCHAR)) from DBO.SYSPROCESSES S where S.spid = Q3.h3) +',','') +
	isnull((select rtrim(CAST(S.HOSTNAME AS VARCHAR)) from DBO.SYSPROCESSES S where S.spid = Q3.h4) +',','') +
	isnull((select rtrim(CAST(S.HOSTNAME AS VARCHAR)) from DBO.SYSPROCESSES S where S.spid = Q3.h5) +',','') +
	isnull((select rtrim(CAST(S.HOSTNAME AS VARCHAR)) from DBO.SYSPROCESSES S where S.spid = Q3.h6) +',','') +
	isnull((select rtrim(CAST(S.HOSTNAME AS VARCHAR)) from DBO.SYSPROCESSES S where S.spid = Q3.h7) +',','') +
	isnull((select rtrim(CAST(S.HOSTNAME AS VARCHAR)) from DBO.SYSPROCESSES S where S.spid = Q3.h8) +',','') +
	isnull((select rtrim(CAST(S.HOSTNAME AS VARCHAR)) from DBO.SYSPROCESSES S where S.spid = Q3.h9) +',','') +
	isnull((select rtrim(CAST(S.HOSTNAME AS VARCHAR)) from DBO.SYSPROCESSES S where S.spid = Q3.h10) +',','')
from
(
	select 
		max(h1) h1,
		max(h2) h2,
		max(h3) h3,
		max(h4) h4,
		max(h5) h5,
		max(h6) h6,
		max(h7) h7,
		max(h8) h8,
		max(h9) h9,
		max(h10) h10
	from
	(
		select 
			case count(q2.spid) when 0 then Q1.spid else null end h1,
			case count(q2.spid) when 1 then Q1.spid else null end h2,
			case count(q2.spid) when 2 then Q1.spid else null end h3,
			case count(q2.spid) when 3 then Q1.spid else null end h4,
			case count(q2.spid) when 4 then Q1.spid else null end h5,
			case count(q2.spid) when 5 then Q1.spid else null end h6,
			case count(q2.spid) when 6 then Q1.spid else null end h7,
			case count(q2.spid) when 7 then Q1.spid else null end h8,
			case count(q2.spid) when 8 then Q1.spid else null end h9,
			case count(q2.spid) when 9 then Q1.spid else null end h10
		from
		(
			SELECT CAST(S.HOSTNAME AS VARCHAR) + ', ' HOSTNAME, min(spid) spid
			FROM DBO.SYSPROCESSES AS S
			WHERE	S.LOGIN_TIME < CAST(FLOOR(CAST(GETDATE()+1 AS FLOAT)) AS DATETIME) AND
				S.HOSTNAME != ''
			group by S.HOSTNAME) Q1
		left join
		(
			SELECT CAST(S.HOSTNAME AS VARCHAR) + ', ' HOSTNAME, min(spid) spid
			FROM DBO.SYSPROCESSES AS S
			WHERE	S.LOGIN_TIME < CAST(FLOOR(CAST(GETDATE()+1 AS FLOAT)) AS DATETIME) AND
				S.HOSTNAME != ''
			group by S.HOSTNAME) Q2 on Q1.HOSTNAME>Q2.HOSTNAME
		group by  Q1.spid
	) Q2
) Q3
11 ноя 15, 15:30    [18400664]     Ответить | Цитировать Сообщить модератору
 Re: Листинг запроса под MSSQL2000  [new]
СТУДЕНТ123
Guest
o-o
СТУДЕНТ123,

Тогда чем не подошел вариант с функцией?
Select и никаких переменных


Полностью с Вами согласен, к сожалению запрещено создавать пользовательские функции и процедуры, т.к. сервер не нам принадлежит, просто запрещено не смотря на то что прав вполне достаточно на это. Если в ПО подсунуть любой листинг с символом @, то запрос не отправляется серверу, детальное сообщение не отображается за исключением "ERROR"

Вот такие пироги), пойду просить "Разрешение" на создание функции, другого выхода нет
11 ноя 15, 15:35    [18400701]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить