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

Откуда:
Сообщений: 3
Pomogite, pojalusta s zaprosom.

MSSQL 2008

Sozdal vot takuju structuru:

Create Table Leads (
LeadID int not null Primary Key CLUSTERED,
EmpOwnerID int not NULL,
LeadName varchar(100),
CONSTRAINT FK_Leads_Employess FOREIGN KEY (EmpOwnerID) REFERENCES Employees (EmpID)
)

CREATE TABLE Employees (
EmpID int not NULL PRIMARY KEY CLUSTERED,
EmpName varchar(100)
)

CREATE TABLE dbo. EmplRelation(
EmplRelationID int IDENTITY(1,1) NOT NULL,
EmpOwnerID int NOT NULL,
EmpID int NOT NULL,
CONSTRAINT PK_ EmplRelationID PRIMARY KEY CLUSTERED (EmplRelationID),
CONSTRAINT FK_ EmplRelation _ Employees1 FOREIGN KEY (EmpOwnerID) REFERENCES Employees (EmpID),
CONSTRAINT FK_ EmplRelation _ Employees2 FOREIGN KEY (EmpID) REFERENCES Employees (EmpID),
CONSTRAINT UK_ EmplRelation UNIQUE (EmpID, EmpOwnerID),
CONSTRAINT CK_ EmplRelation CHECK(EmpOwnerID <> EmpID)
)

Lead eto object kotorij hotyat smotret’ employees. Lead mojet bit’ tolko pod odnim employee. Employee mogut bit’ drug pod drugom. Ogranichenija net na kolichestvo urovney.
User loginitsja by EmployeeID v programmu. On odin iz employees.

Vopros – KAK mne poluchit’ spisok vseh LEADS kotorije JA imeju pravo smotret’?

Ja imeju pravo smotre’t’ svoi leads, t.e. te u kotorih EmpOwnerID = @LoginEmplID v tablize Leads, a takje leads vseh teh, kotorie nahodjatsja podo mnoj v tablize EmplRelation, t.e. u kotorih v pole EmpOwnerID =@LoginEmplID

Dima.
13 авг 09, 12:15    [7532482]     Ответить | Цитировать Сообщить модератору
 Re: recursija, MSSQL2008  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
BOL->WITH common_table_expression->Example D
13 авг 09, 12:31    [7532609]     Ответить | Цитировать Сообщить модератору
 Re: recursija, MSSQL2008  [new]
GlebZ
Member

Откуда: USA
Сообщений: 284
2008? в hierarchyid Data Type покопаться не хотите?
Я с ними не работал - у нас пока только 2005 - только поигрался немного. Но на 2005 у нас реализовано с помощью поля Link на триггере
EmployeeID ParentEmployeeID, EmployeeLink, EmployeeLevel
1,NULL,/1/,0
2,1,/1/2/,1
3,2,/1/2/3/,2

и т.д.
SELECT * FROM Table
WHERE EmployeeLink LIKE @ParentEmployeeLink+'%'

даёт желаемый результат (У нас это идёт ещё с 2000, если не раньше - никакой рекурсии или CTE)
Водку? Водку - буду!
13 авг 09, 17:34    [7535286]     Ответить | Цитировать Сообщить модератору
 Re: recursija, MSSQL2008  [new]
ererererer1
Member

Откуда:
Сообщений: 31
да прикольно с помощью поля Линк и тригера.
в 2008 не надо ничего такого делать есть hierarchyID тип. сервер научили работать с древовидными данные - зачем что-то придумывать.
13 авг 09, 20:25    [7535976]     Ответить | Цитировать Сообщить модератору
 Re: recursija, MSSQL2008  [new]
GlebZ
Member

Откуда: USA
Сообщений: 284
ererererer1
да прикольно с помощью поля Линк и тригера.
в 2008 не надо ничего такого делать есть hierarchyID тип. сервер научили работать с древовидными данные - зачем что-то придумывать.

Самое смешное, что внешне у нас оказалось очень похоже на то, что сделали в 2008
13 авг 09, 20:57    [7536035]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить