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

Откуда: Россия, Москва
Сообщений: 1592
Добрый день! Заинтересовал вопрос, что за число возвращается при запросе
select @@procid

если запрос выполняется в SSMS, не из процедуры, триггера или прочего модуля. Возвращается какое то число, хотя ожидал 0 или null. Как ни странно, в BOL этот вопрос не освещен.

С уважением, Князев Константин
5 фев 16, 12:45    [18776936]     Ответить | Цитировать Сообщить модератору
 Re: Значение @@procid при вызове не из модуля  [new]
Владислав Колосов
Member

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

думаю, что любой скомпилированный пакет как-то соотносится с этим идентификатором.
5 фев 16, 13:23    [18777246]     Ответить | Цитировать Сообщить модератору
 Re: Значение @@procid при вызове не из модуля  [new]
o-o
Guest
думаю, никак это ни с чем не соотносится.
у меня во всех окнах с запросами к абсолютно разным серверам неизменное 141475863.
а зато если запрос к 2000-ому, то честный 0
5 фев 16, 14:08    [18777622]     Ответить | Цитировать Сообщить модератору
 Re: Значение @@procid при вызове не из модуля  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1910
o-o,

хм у меня результат меняется каждый раз как появляется выполняется новый пакет, но после выполнения в первый раз результат остается неизменным.

придерживаюсь точки зрения Владислава Колосова

select @@VERSION
select @@PROCID
go

select @@VERSION
select @@PROCID
go


вывод

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Microsoft SQL Server 2014 - 12.0.2000.8 (X64)
Feb 20 2014 20:04:26
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)


(строк обработано: 1)


-----------
152391017

(строк обработано: 1)


----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Microsoft SQL Server 2014 - 12.0.2000.8 (X64)
Feb 20 2014 20:04:26
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)


(строк обработано: 1)


-----------
157273063

(строк обработано: 1)

5 фев 16, 14:19    [18777742]     Ответить | Цитировать Сообщить модератору
 Re: Значение @@procid при вызове не из модуля  [new]
Konst_One
Member

Откуда:
Сообщений: 11677
https://msdn.microsoft.com/ru-ru/library/ms174408(v=sql.105).aspx

Возвращает идентификатор объекта (ID) текущего модуля Transact-SQL. Модуль Transact-SQL может быть хранимой процедурой, определяемой пользователем функцией или триггером. Функция @@PROCID не может быть вызвана из модулей среды CLR или внутрипроцессного поставщика доступа к данным.
5 фев 16, 14:22    [18777767]     Ответить | Цитировать Сообщить модератору
 Re: Значение @@procid при вызове не из модуля  [new]
Konst_One
Member

Откуда:
Сообщений: 11677
если в разных окнах SSMS "New Query", то разный номер
5 фев 16, 14:25    [18777787]     Ответить | Цитировать Сообщить модератору
 Re: Значение @@procid при вызове не из модуля  [new]
invm
Member

Откуда: Москва
Сообщений: 9913
o-o
думаю, никак это ни с чем не соотносится.
Все-таки как-то соотносится, т.к. зависит от текста пакета:
declare @s varchar(36) = newid();
exec('/*' + @s + '*/select @@procid;');
5 фев 16, 14:30    [18777818]     Ответить | Цитировать Сообщить модератору
 Re: Значение @@procid при вызове не из модуля  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9159
o-o
думаю, никак это ни с чем не соотносится.
у меня во всех окнах с запросами к абсолютно разным серверам неизменное 141475863.
а зато если запрос к 2000-ому, то честный 0


Если в одном из окон текст запроса слегка исправить, то номер изменится, а во втором останется прежним. Если во втором окне текст изменить на первое окно, то ID совпадают. Это как-то намекает на кэширование.
5 фев 16, 14:31    [18777822]     Ответить | Цитировать Сообщить модератору
 Re: Значение @@procid при вызове не из модуля  [new]
o-o
Guest
Konst_One
https://msdn.microsoft.com/ru-ru/library/ms174408(v=sql.105).aspx

Возвращает идентификатор объекта (ID) текущего модуля Transact-SQL. Модуль Transact-SQL может быть хранимой процедурой, определяемой пользователем функцией или триггером. Функция @@PROCID не может быть вызвана из модулей среды CLR или внутрипроцессного поставщика доступа к данным.

капец какой.
а то мы не знали, что есть модуль.
а вот ТС спрашивает, что возвращает, когда _не из модуля_ вызывается
5 фев 16, 14:33    [18777828]     Ответить | Цитировать Сообщить модератору
 Re: Значение @@procid при вызове не из модуля  [new]
o-o
Guest
invm
o-o
думаю, никак это ни с чем не соотносится.
Все-таки как-то соотносится, т.к. зависит от текста пакета:
declare @s varchar(36) = newid();
exec('/*' + @s + '*/select @@procid;');

етот код (с разнесением объявления и присваивания) проканал даже 2000-ый.
да, меняется, уже никакой не 0
5 фев 16, 14:36    [18777840]     Ответить | Цитировать Сообщить модератору
 Re: Значение @@procid при вызове не из модуля  [new]
Konst_One
Member

Откуда:
Сообщений: 11677
o-o
Konst_One
https://msdn.microsoft.com/ru-ru/library/ms174408(v=sql.105).aspx

Возвращает идентификатор объекта (ID) текущего модуля Transact-SQL. Модуль Transact-SQL может быть хранимой процедурой, определяемой пользователем функцией или триггером. Функция @@PROCID не может быть вызвана из модулей среды CLR или внутрипроцессного поставщика доступа к данным.

капец какой.
а то мы не знали, что есть модуль.
а вот ТС спрашивает, что возвращает, когда _не из модуля_ вызывается


ssms "new query" до первого GO - это модуль
5 фев 16, 14:37    [18777848]     Ответить | Цитировать Сообщить модератору
 Re: Значение @@procid при вызове не из модуля  [new]
o-o
Guest
Konst_One
o-o
пропущено...

капец какой.
а то мы не знали, что есть модуль.
а вот ТС спрашивает, что возвращает, когда _не из модуля_ вызывается


ssms "new query" до первого GO - это модуль

всю жизнь это был пакет.
но я с удовольствием приму к прочтению ссылку,
где имеется подтверждение вашим словам
5 фев 16, 14:39    [18777862]     Ответить | Цитировать Сообщить модератору
 Re: Значение @@procid при вызове не из модуля  [new]
o-o
Guest
картинок 2000-ого давно не было.
серость унылая

К сообщению приложен файл. Размер - 41Kb
5 фев 16, 14:41    [18777877]     Ответить | Цитировать Сообщить модератору
 Re: Значение @@procid при вызове не из модуля  [new]
Konst_One
Member

Откуда:
Сообщений: 11677
https://www.sql.ru/forum/664236/procid-vne-procedury
5 фев 16, 14:45    [18777901]     Ответить | Цитировать Сообщить модератору
 Re: Значение @@procid при вызове не из модуля  [new]
o-o
Guest
Konst_One
https://www.sql.ru/forum/664236/procid-vne-procedury

единственное, что я там вижу,
это подтверждение моих слов, что пакет в окне студии/аналайзера --
это никакой не модуль.
daw
> На MSSQL 2000 выдаёт ожидаемый 0. При выполнении на MSSQL 2005 9.00.4220
> в новом окне под SQL Query Analizer 2000 возвращает одно число, под
> Management Studio 2005 другое. Почему не 0 и что это за число?

а почему 0? в документации, вроде, не сказано ничего про то, что
эта функция должна возвращать, будучи вызванной не из sql-модуля (процедуры/функции/триггера).

а где подтверждение ваших слов
Konst_One
ssms "new query" до первого GO - это модуль

???
5 фев 16, 14:53    [18777951]     Ответить | Цитировать Сообщить модератору
 Re: Значение @@procid при вызове не из модуля  [new]
Konst_One
Member

Откуда:
Сообщений: 11677
я что вам микрософт? я написал своё понимание , как это работает. один пакет = один модуль
5 фев 16, 14:56    [18777974]     Ответить | Цитировать Сообщить модератору
 Re: Значение @@procid при вызове не из модуля  [new]
o-o
Guest
Konst_One
я что вам микрософт? я написал своё понимание , как это работает. один пакет = один модуль

так вы понимайте себе в персональном блоге
или дописывайте IMHO.
а то у модуля уже новое определение с сегодняшнего дня, by Konst_One
5 фев 16, 15:08    [18778030]     Ответить | Цитировать Сообщить модератору
 Re: Значение @@procid при вызове не из модуля  [new]
Konst_One
Member

Откуда:
Сообщений: 11677
o-o,
а вы тут за модератора от микрософта подрабатываете? я высказал своё понимание проблемы на форуме, вы можете соглашаться или нет, мне плевать. главное , что оно разъясняет для меня вопрос, поставленный ТС, и может кому и пригодится. а вы тут только троллите
5 фев 16, 15:11    [18778041]     Ответить | Цитировать Сообщить модератору
 Re: Значение @@procid при вызове не из модуля  [new]
Maxx
Member [скрыт]

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

вот позволю с вами не согласиться.
о-о знатынй иследователь и подтверждает все иследования репо и картинками ,и ессно как любой человек занимающейся такими вещами обладает достаточный количеством здорового занудства :) Так что,ваши ,обвинения совершенно мимо кассы.
А определения на то и придуманны были - чтоб все понимали одно и тоже когда ими оперируют.
5 фев 16, 15:36    [18778201]     Ответить | Цитировать Сообщить модератору
 Re: Значение @@procid при вызове не из модуля  [new]
Konst_One
Member

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

все мы в известной степени зануды =) согласен, на личности переходить не стоит
5 фев 16, 15:41    [18778241]     Ответить | Цитировать Сообщить модератору
 Re: Значение @@procid при вызове не из модуля  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1910
Konst_One,

ssms "new query" до первого GO - это модуль


как по мне в определение "модуля" должен входить объект на который указывает ссылка из sys.objects и sys.sql_modules.

хотелось бы понять почему вы считаете некий набор стейтментов не заключенных в определение sp/fn/tr как определение модуля?

чисто из личного любопытства :)
5 фев 16, 16:18    [18778543]     Ответить | Цитировать Сообщить модератору
 Re: Значение @@procid при вызове не из модуля  [new]
Konst_One
Member

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

одно окно SSMS даёт всегда одно значение @@PROCID. а уж с определениями - это не ко мне
5 фев 16, 16:31    [18778641]     Ответить | Цитировать Сообщить модератору
 Re: Значение @@procid при вызове не из модуля  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
о-о style:)

К сообщению приложен файл. Размер - 137Kb
5 фев 16, 16:40    [18778695]     Ответить | Цитировать Сообщить модератору
 Re: Значение @@procid при вызове не из модуля  [new]
Konst_One
Member

Откуда:
Сообщений: 11677
вот и картинки это подтверждают всё, что я раньше написал =)
5 фев 16, 16:42    [18778702]     Ответить | Цитировать Сообщить модератору
 Re: Значение @@procid при вызове не из модуля  [new]
invm
Member

Откуда: Москва
Сообщений: 9913
Konst_One
вот и картинки это подтверждают всё, что я раньше написал =)
Вы написали фигню.
Потому что окна SSMS тут совершенно ни при чем. Для идентичных текстов пакетов будет одно и то же значение @@PROCID, вне зависимости откуда этот пакет запускался.
5 фев 16, 17:05    [18778799]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить