这是论坛里面找的关于联查的一段代码:
--测试数据
if OBJECT_ID('tb') is not null
drop table tb
go
CREATE TABLE tb(ID char(3),PID char(3),Name nvarchar(10))
INSERT tb SELECT '001',NULL ,'山东省'
UNION ALL SELECT '002','001','烟台市'
UNION ALL SELECT '004','002','招远市'
UNION ALL SELECT '003','001','青岛市'
UNION ALL SELECT '005',NULL ,'四会市'
UNION ALL SELECT '006','005','清远市'
UNION ALL SELECT '007','006','小分市'
GO
--2000的方法--查询指定节点及其所有子节点的函数
CREATE FUNCTION f_Cid(@ID char(3))
RETURNS @t_Level TABLE(ID char(3),Level int)
AS
BEGIN
declare @Level int
set @level=1
insert @t_level select @id,@level
while @@rowcount>0
begin
set @level=@level+1
insert @t_Level select tb.id,@level
from tb join @t_level t on tb.pid=t.id
where t.level+1=@level
end
return
endselect tb.*
from tb join dbo.f_cid('002') b
on tb.ID=b.id
但是我运行时,提示如下,麻烦知道的大侠帮忙改下~~~~~(所影响的行数为 7 行)服务器: 消息 137,级别 15,状态 1,过程 f_Cid,行 10
必须声明变量 '@level'。
服务器: 消息 137,级别 15,状态 1,过程 f_Cid,行 10
必须声明变量 '@t_level'。
服务器: 消息 137,级别 15,状态 1,过程 f_Cid,行 10
必须声明变量 '@id'。
服务器: 消息 137,级别 15,状态 1,过程 f_Cid,行 13
必须声明变量 '@level'。
服务器: 消息 137,级别 15,状态 1,过程 f_Cid,行 15
必须声明变量 '@level'。
服务器: 消息 156,级别 15,状态 1,过程 f_Cid,行 21
在关键字 'select' 附近有语法错误。
--测试数据
if OBJECT_ID('tb') is not null
drop table tb
go
CREATE TABLE tb(ID char(3),PID char(3),Name nvarchar(10))
INSERT tb SELECT '001',NULL ,'山东省'
UNION ALL SELECT '002','001','烟台市'
UNION ALL SELECT '004','002','招远市'
UNION ALL SELECT '003','001','青岛市'
UNION ALL SELECT '005',NULL ,'四会市'
UNION ALL SELECT '006','005','清远市'
UNION ALL SELECT '007','006','小分市'
GO
--2000的方法--查询指定节点及其所有子节点的函数
CREATE FUNCTION f_Cid(@ID char(3))
RETURNS @t_Level TABLE(ID char(3),Level int)
AS
BEGIN
declare @Level int
set @level=1
insert @t_level select @id,@level
while @@rowcount>0
begin
set @level=@level+1
insert @t_Level select tb.id,@level
from tb join @t_level t on tb.pid=t.id
where t.level+1=@level
end
return
endselect tb.*
from tb join dbo.f_cid('002') b
on tb.ID=b.id
但是我运行时,提示如下,麻烦知道的大侠帮忙改下~~~~~(所影响的行数为 7 行)服务器: 消息 137,级别 15,状态 1,过程 f_Cid,行 10
必须声明变量 '@level'。
服务器: 消息 137,级别 15,状态 1,过程 f_Cid,行 10
必须声明变量 '@t_level'。
服务器: 消息 137,级别 15,状态 1,过程 f_Cid,行 10
必须声明变量 '@id'。
服务器: 消息 137,级别 15,状态 1,过程 f_Cid,行 13
必须声明变量 '@level'。
服务器: 消息 137,级别 15,状态 1,过程 f_Cid,行 15
必须声明变量 '@level'。
服务器: 消息 156,级别 15,状态 1,过程 f_Cid,行 21
在关键字 'select' 附近有语法错误。
select tb.*
from tb join dbo.f_cid('002') b
on tb.ID=b.id 加个GO,测试正常.
你把代码ctrl+A全选了 在F5 就正常了
if OBJECT_ID('tb') is not null
drop table tb
go
CREATE TABLE tb(ID char(3),PID char(3),Name nvarchar(10))
INSERT tb SELECT '001',NULL ,'山东省'
UNION ALL SELECT '002','001','烟台市'
UNION ALL SELECT '004','002','招远市'
UNION ALL SELECT '003','001','青岛市'
UNION ALL SELECT '005',NULL ,'四会市'
UNION ALL SELECT '006','005','清远市'
UNION ALL SELECT '007','006','小分市'
GO
--2000的方法 --查询指定节点及其所有子节点的函数
CREATE FUNCTION f_Cid(@ID char(3))
RETURNS @t_Level TABLE(ID char(3),Level int)
AS
BEGIN
declare @Level int
set @level=1
insert @t_level select @id,@level
while @@rowcount>0
begin
set @level=@level+1
insert @t_Level select tb.id,@level
from tb join @t_level t on tb.pid=t.id
where t.level+1=@level
end
return
end
go--加go
select tb.*
from tb join dbo.f_cid('002') b
on tb.ID=b.id 然后ctrl+A 再F5 就正常了
if OBJECT_ID('tb') is not null
drop table tb
go
CREATE TABLE tb(ID char(3),PID char(3),Name nvarchar(10))
INSERT tb SELECT '001',NULL ,'山东省'
UNION ALL SELECT '002','001','烟台市'
UNION ALL SELECT '004','002','招远市'
UNION ALL SELECT '003','001','青岛市'
UNION ALL SELECT '005',NULL ,'四会市'
UNION ALL SELECT '006','005','清远市'
UNION ALL SELECT '007','006','小分市'
GO
--2000的方法 --查询指定节点及其所有子节点的函数
CREATE FUNCTION f_Cid3(@ID char(3))
RETURNS @t_Level TABLE(ID char(3),Level int)
AS
BEGIN
declare @Level int
set @level=1
insert @t_level select @id,@level
while @@rowcount>0
begin
set @level=@level+1
insert @t_Level select tb.id,@level
from tb join @t_level t on tb.pid=t.id
where t.level+1=@level
end
return
end
go--加go
select tb.*
from tb join dbo.f_cid3('002') b
on tb.ID=b.id
我加了,还是不行啊?(所影响的行数为 7 行)服务器: 消息 137,级别 15,状态 1,过程 f_Cid3,行 10
必须声明变量 '@level'。
服务器: 消息 137,级别 15,状态 1,过程 f_Cid3,行 10
必须声明变量 '@t_level'。
服务器: 消息 137,级别 15,状态 1,过程 f_Cid3,行 10
必须声明变量 '@id'。
服务器: 消息 137,级别 15,状态 1,过程 f_Cid3,行 13
必须声明变量 '@level'。
服务器: 消息 137,级别 15,状态 1,过程 f_Cid3,行 15
必须声明变量 '@level'。
服务器: 消息 170,级别 15,状态 1,过程 f_Cid3,行 20
第 20 行: 'go' 附近有语法错误。
我QQ30384318,谁能帮我看下啊?
if OBJECT_ID('tb') is not null
drop table tb
go
CREATE TABLE tb(ID char(3),PID char(3),Name nvarchar(10))
INSERT tb SELECT '001',NULL ,'山东省'
UNION ALL SELECT '002','001','烟台市'
UNION ALL SELECT '004','002','招远市'
UNION ALL SELECT '003','001','青岛市'
UNION ALL SELECT '005',NULL ,'四会市'
UNION ALL SELECT '006','005','清远市'
UNION ALL SELECT '007','006','小分市'
GO
--2000的方法--查询指定节点及其所有子节点的函数
create FUNCTION f_Cid(@ID char(3))
RETURNS @t_Level TABLE(ID char(3),Level int)
AS
BEGIN
declare @Level int
set @level=1
insert @t_level select @id,@level
while @@rowcount>0
begin
set @level=@level+1
insert @t_Level select tb.id,@level
from tb join @t_level t on tb.pid=t.id
where t.level+1=@level
end
return
end
go
select tb.*
from tb join dbo.f_cid('002') b
on tb.ID=b.id
/*
ID PID Name
---- ---- ----------
002 001 烟台市
004 002 招远市*/
复制黏贴过去试试