Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как найти формирующую функцию?  [new]
feoktant
Member

Откуда:
Сообщений: 7
Ситуация такова - есть база данных, с энным количеством функций. В одной из таблиц есть поле OrNumber. Тип - varchar(50).

select distinct OrNumber
from ds_orders

выдает вот что(фрагмент):
OrNumber
-----------
PS1005
PS1006
PS1007
PS1008
PS1009
PS101
VS1
VS10
VS100
VS1000
VS1001
VS1002
VS1003
VS1004
VS1005
VS1006
VS1007
VS1008
VS1009

Как оно формируется - понять из 2000 строчек мне не удалось :(
Поэтому и вопрос - как найти задающую функцию?
7 июл 09, 16:22    [7387392]     Ответить | Цитировать Сообщить модератору
 Re: как найти формирующую функцию?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
ну ф-ции туту навлядле вам помогут,вам скорее всего процедуру искать надо,которая генерит ваши номера.

А как искать... ну яб сузил бы сначала до процедуры вставки в таблицу, там бы генератор номера и нашел ся б
-------------------------------------
Jedem Das Seine
7 июл 09, 16:25    [7387424]     Ответить | Цитировать Сообщить модератору
 Re: как найти формирующую функцию?  [new]
flexgen
Member

Откуда: Город на песке
Сообщений: 765
feoktant,

Я с трудом улавливаю суть вопроса. Какие функции, что формируется?
7 июл 09, 16:25    [7387427]     Ответить | Цитировать Сообщить модератору
 Re: как найти формирующую функцию?  [new]
feoktant
Member

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

Я хотел сказать, как получаются такие номера? Это функция или процедура? И как ее найти. То, что она как-то генерируется - 100%
7 июл 09, 16:31    [7387481]     Ответить | Цитировать Сообщить модератору
 Re: как найти формирующую функцию?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36828
feoktant
flexgen,

Я хотел сказать, как получаются такие номера? Это функция или процедура? И как ее найти. То, что она как-то генерируется - 100%
Ща все телепаты соберутся вместе и назовут вам номер строки, где она формируется.

З.Ы. Стопудово в 935й строке.

Сообщение было отредактировано: 7 июл 09, 16:32
7 июл 09, 16:31    [7387494]     Ответить | Цитировать Сообщить модератору
 Re: как найти формирующую функцию?  [new]
feoktant
Member

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

благодарю. А как это сделать?
7 июл 09, 16:32    [7387497]     Ответить | Цитировать Сообщить модератору
 Re: как найти формирующую функцию?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
ну так начните с процедуры вставки данных в ету таблицу,
или последовательно перебирите все процедуры в которых есть упоминание об етой таблице
-------------------------------------
Jedem Das Seine
7 июл 09, 16:32    [7387501]     Ответить | Цитировать Сообщить модератору
 Re: как найти формирующую функцию?  [new]
Гавриленко Сергей Алексеевич
Member

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

благодарю. А как это сделать?
Вы текстовым редактором пользоваться умеете? А командой copy/paste?
7 июл 09, 16:33    [7387508]     Ответить | Цитировать Сообщить модератору
 Re: как найти формирующую функцию?  [new]
Maxx
Member [скрыт]

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

select distinct object_name(id)
from syscomments
where text like '%ds_orders%'
7 июл 09, 16:34    [7387514]     Ответить | Цитировать Сообщить модератору
 Re: как найти формирующую функцию?  [new]
i2akai1
Member

Откуда: Петербург
Сообщений: 217
feoktant,

я бы поискал по коду функций и процедур строку 'OrNumber'
узнал бы где она встречается и смотрел бы уже сам код

для себя давно уже для таких целей писал что-то вроде:

/*
  Поиск строки по коду процедур, триггеров функций... в БД
  @what - список строк поиска через запятую,
  @where - тип объекта поиска (ALL, P, TR, FN ...)
*/
create function dbo.find_string(
  @what varchar(500),
  @where varchar(4)
) returns @Result table (
  kw varchar(100),
  objtype varchar(4),
  obj sysname,
  context varchar(500)   
)
as
begin
  set @what = ltrim(rtrim(@what)) + ','
  declare @word varchar(100)
  declare @i int
  set	@i = patindex('%,%', @what)

  while @i > 0
  begin
    set @word = substring(@what, 1, @i - 1)
    set @what = stuff(@what, 1, @i, '')
	
    insert @Result 
    select @word, 
      so.xtype, 
      so.name, 
      substring(sc.text, patindex('%'+@word+'%', sc.text),len(@word)+ 30)  
  	from	sysobjects so join syscomments sc on sc.id=so.id  
	  where	sc.text like '%'+@word+'%' 
          and so.xtype = case @where when 'ALL' then so.xtype else @where end
    set	@i = patindex('%,%',@what)
  end
  return
end


использовать так:
select * from dbo.find_string('OrNumber', 'P')

:)
7 июл 09, 16:34    [7387516]     Ответить | Цитировать Сообщить модератору
 Re: как найти формирующую функцию?  [new]
feoktant
Member

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

а другого способа, кроме как вручную нет? Там более 50ти функций, которые зависят от этой таблицы
7 июл 09, 16:34    [7387517]     Ответить | Цитировать Сообщить модератору
 Re: как найти формирующую функцию?  [new]
Гавриленко Сергей Алексеевич
Member

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

а другого способа, кроме как вручную нет? Там более 50ти функций, которые зависят от этой таблицы
Вы ответы читаете вообще? Вам пишут найти место, где данные вставляются в эту таблицу, а не выбираются.
7 июл 09, 16:36    [7387545]     Ответить | Цитировать Сообщить модератору
 Re: как найти формирующую функцию?  [new]
feoktant
Member

Откуда:
Сообщений: 7
Гавриленко Сергей Алексеевич,

если бы я знал где эти данные вставляются в таблицу, я бы вопрос не задавал
7 июл 09, 16:39    [7387577]     Ответить | Цитировать Сообщить модератору
 Re: как найти формирующую функцию?  [new]
Glory
Member

Откуда:
Сообщений: 104760
feoktant
Гавриленко Сергей Алексеевич,

если бы я знал где эти данные вставляются в таблицу, я бы вопрос не задавал

Ну и что мешает через Profiler увидеть, как данные вставляются в таблицу ?
Или вы думаете, что во всех базах мира ключи генерируются одной процедурой ?
7 июл 09, 16:44    [7387624]     Ответить | Цитировать Сообщить модератору
 Re: как найти формирующую функцию?  [new]
feoktant
Member

Откуда:
Сообщений: 7
Glory
feoktant
Гавриленко Сергей Алексеевич,

если бы я знал где эти данные вставляются в таблицу, я бы вопрос не задавал

Ну и что мешает через Profiler увидеть, как данные вставляются в таблицу ?


Не могли бы подробней?
7 июл 09, 16:46    [7387647]     Ответить | Цитировать Сообщить модератору
 Re: как найти формирующую функцию?  [new]
feoktant
Member

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

благодарю за помощь. Нашел)
7 июл 09, 17:41    [7388123]     Ответить | Цитировать Сообщить модератору
 Re: как найти формирующую функцию?  [new]
GlebZ
Member

Откуда: USA
Сообщений: 284
feoktant
i2akai1,

благодарю за помощь. Нашел)

Что-то типа:
SELECT 'VS'+cast(MAX(CAST(REPLACE(OrNumber,'VS','') AS int)+1) AS varchar(5))
FROM #ds_orders
WHERE OrNumber LIKE 'VS%'
?
7 июл 09, 17:57    [7388217]     Ответить | Цитировать Сообщить модератору
 Re: как найти формирующую функцию?  [new]
GlebZ
Member

Откуда: USA
Сообщений: 284
VS и PS - скорее всего разные типы заказов. Со своим счётчиком.
Водку? Водку - буду!
7 июл 09, 17:58    [7388228]     Ответить | Цитировать Сообщить модератору
 Re: как найти формирующую функцию?  [new]
i2akai1
Member

Откуда: Петербург
Сообщений: 217
feoktant,

пожалуйста :)
7 июл 09, 21:46    [7388849]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить