日期:2014-05-18  浏览次数:20372 次

根据条件动态从数据库取数据生成treeveiw?
张三(销售主管)
      --李四(销售主任)
              --小李(组员)
              --小李(组员)
      --小王(销售主任)

数据结构是这样的:

表Sales(销售人员表)
SaleID     SaleName     ParentID
  1                 张三             0
  2                 李四             1
  3                 小李             2
  4                 小李             2
  5                 小王             1
我的问题是,如当 "李四 "登录,只能看他本人和他所有子节数据.请问该怎么实现

------解决方案--------------------
加个字段,如path SaleID SaleName ParentID ,Path 1 张三 0 1, 2 李四 1 1,2, 3 小李 2 1,2,3, 4 小李 2 1,2,4, 5 小王 1 1,5, 查询的时候如果查李四,那就 path like '%,2,% '
------解决方案--------------------
我的问题是,如当 "李四 "登录,只能看他本人和他所有子节数据.请问该怎么实现

========

基于你目前的表结构,可以这样 ->

1。 SQL Server 中递归获取子代节点记录

-- http://community.csdn.net/Expert/TopicView3.asp?id=5603719
-- 测试数据
CREATE TABLE Catalog(
[ID] int primary key,
TypeName varchar(100),
SupTypeID int
)
INSERT INTO Catalog
SELECT 1, 'Agriculture ', 0
UNION
SELECT 2, 'Apparel & Fashion ', 0
UNION
SELECT 3, 'Automobile ', 0
UNION
SELECT 4, 'Business Services ', 0
UNION
SELECT 5, 'Agriculture & By-product Agents ', 1
UNION
SELECT 6, 'Agriculture Product Stocks ', 1
UNION
SELECT 7, 'Agriculture Products Processing ', 1
UNION
SELECT 8, 'Other ', 6
UNION
SELECT 9, 'Animal Extract ', 6
UNION
SELECT 10, 'Animal Fodders ', 7

GO

CREATE TABLE Product(
PID int primary key,
ProductName varchar(100),
TypeID int,
State int
)
INSERT INTO Product
SELECT 1, 'dfdsf ', 8, 1
UNION
SELECT 2, 'dfdsfdsf ', 9, 0
UNION
SELECT 3, 'dfdfd32 ', 10, 1
UNION
SELECT 4, 'dsfdsf ', 8, 1
UNION
SELECT 5, 'dfdsfds ', 6, 2

GO

-- 存储过程, 临时表版本
CREATE PROCEDURE dbo.usp_SearchProductByAncestorCatalog(
@AncestorCatalogId int
)
AS
SET NOCOUNT ON

-- 目录树临时表
CREATE TABLE #CatalogTree(
CatalogId int,
Generation int)
DECLARE
@Generation int

SET @Generation = 1

INSERT INTO #CatalogTree
SELECT @AncestorCatalogId, @Generation

WHILE @@RowCount > 0
BEGIN
SET @Generation = @Generation + 1
INSERT #CatalogTree
SELECT c.[ID], @Generation
FROM Catalog c
JOIN #CatalogTree t
ON t.Generation = @Generation - 1 AND t.CatalogId = c.SupTypeId
END

--SELECT * FROM #CatalogTree
SELECT * FROM Product WHERE TypeId IN(SELECT CatalogId FROM #CatalogTree)

SET NOCOUNT OFF

RETURN

GO