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

Откуда:
Сообщений: 67
Никто не подскажет как можно ускорить вот такую штуку. Ну или куда смотреть (хотя бы).

CREATE PROCEDURE MyProc
@PageName varchar(250),
@id_contacts int
AS

declare @KolField int, @i int, @SQL nvarchar(4000), @LabelGuide bit, @Field varchar(250), @StringType varchar(250)

set @KolField=(select count(Field) from pagefield where pagename=@PageName)

--//таблица с будущими значениями
if exists (select * from tempdb..sysobjects where id = object_id(N'[tempdb]..[#Prom_PageFildsW]'))
begin
drop table #Prom_PageFildsW
end

CREATE TABLE #Prom_PageFildsW
(
[id] integer IDENTITY (1, 1) PRIMARY KEY,
Field varchar (250),
GuideName varchar (250),
LabelGuide bit,
StringType varchar(250)
)
insert #Prom_PageFildsW (Field, GuideName, LabelGuide, StringType)
select Field, GuideName, dbo.pageItIsGuide (@PageName, Field), StringType from pagefield where pagename=@PageName

set @SQL='';
set @i=1;

while @i<=@KolField
begin
select @LabelGuide=LabelGuide, @Field=Field, @StringType=StringType from #Prom_PageFildsW where id=@i

if @SQL<>'' set @SQL=@SQL+', '

if @LabelGuide=1 set @SQL=@SQL+'dbo.multiGuideForContacts(cast(['+@Field+'] as int)) as ['+@Field+']'
if (@LabelGuide=0) and (@StringType<>'image') set @SQL=@SQL+'['+@Field+']'
if (@LabelGuide=0) and (@StringType='image')
begin
set @SQL=@SQL+'cast(substring(['+@Field+'],1,2) as varchar(10)) as ['+@Field+']'
set @SQL=@SQL+', dbo.strFilesAttr ('+char(39)+@PageName+'.['+@Field+']'+char(39)+', id) as '+char(39)+@Field+'files'+char(39)
end
set @i=@i+1
end

if @SQL<>'' set @SQL=','+@SQL
set @SQL='select id '+@SQL+' from '+@PageName+' where id_contacts='+cast(@id_contacts as varchar(50))+' or id_contacts is null order by id desc '
exec sp_executesql @SQL
GO



CREATE FUNCTION dbo.multiGuideForContacts (@id_multiGuide int)
RETURNS varchar(250) AS
BEGIN
--возвращает значение из справочника по запросу
declare @Value varchar(250)
set @Value=( select Value from multiGuide where [id] =@id_multiGuide )
set @Value=isnull(@Value,'')
return @Value
END
18 сен 09, 15:52    [7679955]     Ответить | Цитировать Сообщить модератору
 Re: Народ! Оцените хр. процедуру!  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
культура письма 0 :(
-------------------------------------
Jedem Das Seine
18 сен 09, 15:55    [7679982]     Ответить | Цитировать Сообщить модератору
 Re: Народ! Оцените хр. процедуру!  [new]
KWS
Member

Откуда:
Сообщений: 67
Maxx, бог с ней с культурой

лучше напишите что и как можно улучшить
18 сен 09, 15:58    [7680005]     Ответить | Цитировать Сообщить модератору
 Re: Народ! Оцените хр. процедуру!  [new]
Ozerov
Member

Откуда: Москва
Сообщений: 3650
KWS
Maxx, бог с ней с культурой

лучше напишите что и как можно улучшить

Т.е. Вы, не уважая других (так как читабильность теряется сильно), хотите помощи от них ? Весело....
18 сен 09, 16:00    [7680024]     Ответить | Цитировать Сообщить модератору
 Re: Народ! Оцените хр. процедуру!  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
а вот это: dbo.pageItIsGuide что такое
--------------------------------------------------------------
Дьявол кроется в деталях.
18 сен 09, 16:00    [7680026]     Ответить | Цитировать Сообщить модератору
 Re: Народ! Оцените хр. процедуру!  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
да и я не против бы :)
Только вопрос... вы пытаетесь собрать запрос с переменым количеством полей к произваольной таблице ?
-------------------------------------
Jedem Das Seine
18 сен 09, 16:01    [7680036]     Ответить | Цитировать Сообщить модератору
 Re: Народ! Оцените хр. процедуру!  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Автор, Вы для чего такую процедуру создали?
Какие задачи она решает, я что-то не пойму...
18 сен 09, 16:01    [7680043]     Ответить | Цитировать Сообщить модератору
 Re: Народ! Оцените хр. процедуру!  [new]
KWS
Member

Откуда:
Сообщений: 67
Ozerov
KWS
Maxx, бог с ней с культурой

лучше напишите что и как можно улучшить

Т.е. Вы, не уважая других (так как читабильность теряется сильно), хотите помощи от них ? Весело....


я сразу не понял что это о читабельности
как ее улучшить? комментарии вставить или еще что
18 сен 09, 16:02    [7680049]     Ответить | Цитировать Сообщить модератору
 Re: Народ! Оцените хр. процедуру!  [new]
Ozerov
Member

Откуда: Москва
Сообщений: 3650
KWS
Ozerov
KWS
Maxx, бог с ней с культурой

лучше напишите что и как можно улучшить

Т.е. Вы, не уважая других (так как читабильность теряется сильно), хотите помощи от них ? Весело....


я сразу не понял что это о читабельности
как ее улучшить? комментарии вставить или еще что

Как минимум начать с прочтения https://www.sql.ru/forum/actualthread.aspx?tid=127456
Ну а дальше уж читать книги, книги....
18 сен 09, 16:03    [7680066]     Ответить | Цитировать Сообщить модератору
 Re: Народ! Оцените хр. процедуру!  [new]
KWS
Member

Откуда:
Сообщений: 67
Maxx
да и я не против бы :)
Только вопрос... вы пытаетесь собрать запрос с переменым количеством полей к произваольной таблице ?
-------------------------------------
Jedem Das Seine



Верно подмечено. Снимаю шляпу!
Поля хранятся в базе, передаю имя таблицы, она получает имя полей и значение - просто поле или справочник. Если справочник берет из него данные с помощью функции (ее текст внизу).
18 сен 09, 16:04    [7680076]     Ответить | Цитировать Сообщить модератору
 Re: Народ! Оцените хр. процедуру!  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Зачем ето параметр
@id_contacts int
по ходу нигде не ислозуется
-------------------------------------
Jedem Das Seine
18 сен 09, 16:06    [7680103]     Ответить | Цитировать Сообщить модератору
 Re: Народ! Оцените хр. процедуру!  [new]
KWS
Member

Откуда:
Сообщений: 67
Дедушка
а вот это: dbo.pageItIsGuide что такое
--------------------------------------------------------------
Дьявол кроется в деталях.


Простенькая функция


CREATE FUNCTION [dbo].[pageItIsGuide] (@PageName varchar(250), @Field varchar(250))
RETURNS bit AS
BEGIN
declare @FieldName varchar(250), @Value bit
select @FieldName=GuideName from pageField where PageName=@PageName and Field=@Field
if (@FieldName is null) or (ltrim(rtrim(@FieldName))='') set @Value=0 else set @Value=1
return @Value
END
18 сен 09, 16:06    [7680107]     Ответить | Цитировать Сообщить модератору
 Re: Народ! Оцените хр. процедуру!  [new]
KWS
Member

Откуда:
Сообщений: 67
Ozerov
KWS
Ozerov
KWS
Maxx, бог с ней с культурой

лучше напишите что и как можно улучшить

Т.е. Вы, не уважая других (так как читабильность теряется сильно), хотите помощи от них ? Весело....


я сразу не понял что это о читабельности
как ее улучшить? комментарии вставить или еще что

Как минимум начать с прочтения https://www.sql.ru/forum/actualthread.aspx?tid=127456
Ну а дальше уж читать книги, книги....



Озеров, извините на первый раз.
Не знал про оформление, тэги и т.п. принятые на форуме.
18 сен 09, 16:07    [7680122]     Ответить | Цитировать Сообщить модератору
 Re: Народ! Оцените хр. процедуру!  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
KWS
передаю имя таблицы, она получает имя полей и значение - просто поле или справочник
Почему не написали по одной процедуре для каждой таблицы?
18 сен 09, 16:08    [7680129]     Ответить | Цитировать Сообщить модератору
 Re: Народ! Оцените хр. процедуру!  [new]
KWS
Member

Откуда:
Сообщений: 67
Maxx
Зачем ето параметр
@id_contacts int
по ходу нигде не ислозуется
-------------------------------------
Jedem Das Seine




он входит вот в переменную @SQL из которой потом запускает запрос Exec-ом

PS про тэги и читабельность понял, еще раз сорри
18 сен 09, 16:10    [7680146]     Ответить | Цитировать Сообщить модератору
 Re: Народ! Оцените хр. процедуру!  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
declare @x varchar(max)
set @x = ''
select 
 @x =@x + y.name +','
from sys.sysobjects x 
  inner join sys.columns y on x.id = y.object_id
where x.name = 'spt_values'

select @x

как пример,моя думать в вашем случае весь ето супер пупер цикл решаться примерно так + case
-------------------------------------
Jedem Das Seine
18 сен 09, 16:12    [7680171]     Ответить | Цитировать Сообщить модератору
 Re: Народ! Оцените хр. процедуру!  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
KWS
Maxx
Зачем ето параметр
@id_contacts int
по ходу нигде не ислозуется
-------------------------------------
Jedem Das Seine




он входит вот в переменную @SQL из которой потом запускает запрос Exec-ом

PS про тэги и читабельность понял, еще раз сорри

сорри не доглядел
18 сен 09, 16:13    [7680184]     Ответить | Цитировать Сообщить модератору
 Re: Народ! Оцените хр. процедуру!  [new]
KWS
Member

Откуда:
Сообщений: 67
Maxx
declare @x varchar(max)
set @x = ''
select 
 @x =@x + y.name +','
from sys.sysobjects x 
  inner join sys.columns y on x.id = y.object_id
where x.name = 'spt_values'

select @x

как пример,моя думать в вашем случае весь ето супер пупер цикл решаться примерно так + case
-------------------------------------
Jedem Das Seine



Благодарен. Интересно. Я подумаю.

Хотел спросить - функция в подобной multiGuideForContacts может вызывать серьезные тормоза если таблица-"справочник" из которой она читает например 1000 записей?
18 сен 09, 16:18    [7680231]     Ответить | Цитировать Сообщить модератору
 Re: Народ! Оцените хр. процедуру!  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
то KWS
вместо dbo.pageItIsGuide можно в селект заполняющий врем. табл. добавить:
case when GuideName is null or ltrim(GuideName)='' then 0 else 1 end
--------------------------------------------------------------
Дьявол кроется в деталях.
18 сен 09, 16:21    [7680261]     Ответить | Цитировать Сообщить модератору
 Re: Народ! Оцените хр. процедуру!  [new]
Maxx
Member [скрыт]

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

не думаю, если еще и индекс по полю id -есть.
18 сен 09, 16:22    [7680269]     Ответить | Цитировать Сообщить модератору
 Re: Народ! Оцените хр. процедуру!  [new]
KWS
Member

Откуда:
Сообщений: 67
Дедушка
то KWS
вместо dbo.pageItIsGuide можно в селект заполняющий врем. табл. добавить:
case when GuideName is null or ltrim(GuideName)='' then 0 else 1 end
--------------------------------------------------------------
Дьявол кроется в деталях.



Спасибо! Я попробую.
18 сен 09, 16:23    [7680277]     Ответить | Цитировать Сообщить модератору
 Re: Народ! Оцените хр. процедуру!  [new]
iljy
Member

Откуда:
Сообщений: 8711
KWS

Хотел спросить - функция в подобной multiGuideForContacts может вызывать серьезные тормоза если таблица-"справочник" из которой она читает например 1000 записей?

она может вызвать серьезные тормоза даже на таблице из 10 записей. Используйте табличную инлайн-функцию.
18 сен 09, 16:23    [7680291]     Ответить | Цитировать Сообщить модератору
 Re: Народ! Оцените хр. процедуру!  [new]
KWS
Member

Откуда:
Сообщений: 67
Maxx
KWS,
не думаю, если еще и индекс по полю id -есть.


Понятно, это можно не трогать, так как индекс есть.
У меня были сомнения особенно в этой части.
18 сен 09, 16:27    [7680323]     Ответить | Цитировать Сообщить модератору
 Re: Народ! Оцените хр. процедуру!  [new]
KWS
Member

Откуда:
Сообщений: 67
iljy
KWS

Хотел спросить - функция в подобной multiGuideForContacts может вызывать серьезные тормоза если таблица-"справочник" из которой она читает например 1000 записей?

она может вызвать серьезные тормоза даже на таблице из 10 записей. Используйте табличную инлайн-функцию.


ясно
постараюсь
18 сен 09, 16:27    [7680327]     Ответить | Цитировать Сообщить модератору
 Re: Народ! Оцените хр. процедуру!  [new]
Maxx
Member [скрыт]

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

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