|
本帖最后由 yodong 于 2012-3-3 16:18 编辑
把下面的VBA函数改写成SQL函数,如何写?
'各层的材料取出来加入到临时表中
Function NodeAdd1(parentID As String) '叠代函数
On Error GoTo aa
Dim strSQL As String
Dim sql1 As String
Dim kk As String
Dim rst As New ADODB.Recordset
Dim cn As ADODB.Connection
Set cn = CurrentProject.Connection
strSQL = "select BOMID, 产品编号, 产品名称" & _
" FROM dbo.CL_tblbom表 " & _
" WHERE 父项 ='" & parentID & "'" & _
" ORDER BY 产品名称"
rst.Open strSQL, cn, adOpenDynamic, adLockReadOnly
If rst.RecordCount = 0 Then Exit Function
rst.MoveFirst
On Error Resume Next
Do While Not rst.EOF()
'==============加入各层的材料
kk = rst("BOMID")
sql1 = "SELECT 物品编码,物品名称,单位,标准用量,层次,BOMID FROM dbo.CL_tblbomsub WHERE BOMID ='" & kk & "'"
cn.Execute ("INSERT INTO dbo.展开临时表 (物品编号, 物品名称, 单位, 标准用量, 层次,BOMID) " & sql1)
'=============='加入各层的材料
NodeAdd1 (kk)
rst.MoveNext
Loop
rst.Close
bb:
Exit Function
aa:
MsgBox Err.Description, , sysstr
Resume bb
End Function
各位朋友,我想把上面这个函数改写成sql函数.
如下面:
ALTER FUNCTION dbo.bomjk
(
@bomid varchar(50)
)
RETURNS @bom table (
id int identity primary key,
BOMID varchar(50),
产品名称 varchar(150),
物品编号 varchar(150),
物品名称 varchar(150),
标准用量 int,
单位 varchar(50),
层次 int
)
AS
BEGIN
declare @bom1 varchar(50)--声明一个接受变量的值
INSERT INTO @bom (物品编号, 物品名称, 单位, 标准用量, 层次,BOMID) SELECT 物品编码,物品名称,单位,标准用量,层次,BOMID FROM dbo.CL_tblbomsub WHERE BOMID = @bomid
declare mybom_cu cursor fast_forward for --声明游标
select BOMID FROM dbo.CL_tblbom表 WHERE 父项 =@bomid
open mybom_cu
fetch next from mybom_cu into @bom1
while @@fetch_status=0
BEGIN
INSERT INTO @bom (物品编号, 物品名称, 单位, 标准用量, 层次,BOMID)
SELECT 物品编码,物品名称,单位,标准用量,层次,BOMID FROM dbo.CL_tblbomsub WHERE BOMID = @bom1
--Execute BOMJK @BOM1
fetch next from mybom_cu into @bom1
END
RETURN
END
qwer(124242234) 17:19:41
是不是SQL函数不能执行它本身.
Execute BOMJK @BOM1
|
|