SQL server2000用户自定义函数问题
做一道习题的时候遇到问题(@_@)●题目创建一个用户自定义函数Goodsorder,以货品名称为参数,返回该货品的订单记录。●问题描述书中只介绍了标量函数,后来再上网才知...
做一道习题的时候遇到问题(@_@)
●题目
创建一个用户自定义函数Goodsorder,以货品名称为参数,返回该货品的订单记录。
●问题描述
书中只介绍了标量函数,后来再上网才知道"内嵌表值函数"和"多语句表值函数",我用的是"内嵌表值函数"
代码如下:
USE market
GO
CREATE FUNCTION dbo.Goodsorder
(@goodsn VARCHAR(20))
RETURNS TABLE
AS
RETURN (SELECT * FROM orders WHERE 货品名称=@goodsn)
GO
SELECT * FROM Goodsorder('内存卡')
GO
-------------------------------------------我是华丽的分割线---------------------------------------------
orders表包含字段:订单号,货品名称,客户编号,数量,总金额,订货日期
其中"内存卡"在orders表中是有记录的,但是上面语句的执行结果却显示无记录(只有几个空字段),这是为什么呢?
WHITE_WIN 网友你说的"SELECT * FROM ORDERS WHERE 货品名称='内存卡' "这个语句肯定能得到结果,但是我的目的是用"内嵌表值函数"来完成这个操作,目前还是返回只有字段名的空TABLE
----------------------------------------------------
"SELECT * FROM ORDERS WHERE 货品名称='内存卡' "试了有结果
"RETURN (SELECT * FROM orders WHERE 货品名称 like '%'+@goodsn+'%')"这条语句试了还是无结果
----------------------------------------------------
我确定函数与数据表都在market这个数据库里,去掉USE MARKET就有结果了!这是为什么呢? 展开
●题目
创建一个用户自定义函数Goodsorder,以货品名称为参数,返回该货品的订单记录。
●问题描述
书中只介绍了标量函数,后来再上网才知道"内嵌表值函数"和"多语句表值函数",我用的是"内嵌表值函数"
代码如下:
USE market
GO
CREATE FUNCTION dbo.Goodsorder
(@goodsn VARCHAR(20))
RETURNS TABLE
AS
RETURN (SELECT * FROM orders WHERE 货品名称=@goodsn)
GO
SELECT * FROM Goodsorder('内存卡')
GO
-------------------------------------------我是华丽的分割线---------------------------------------------
orders表包含字段:订单号,货品名称,客户编号,数量,总金额,订货日期
其中"内存卡"在orders表中是有记录的,但是上面语句的执行结果却显示无记录(只有几个空字段),这是为什么呢?
WHITE_WIN 网友你说的"SELECT * FROM ORDERS WHERE 货品名称='内存卡' "这个语句肯定能得到结果,但是我的目的是用"内嵌表值函数"来完成这个操作,目前还是返回只有字段名的空TABLE
----------------------------------------------------
"SELECT * FROM ORDERS WHERE 货品名称='内存卡' "试了有结果
"RETURN (SELECT * FROM orders WHERE 货品名称 like '%'+@goodsn+'%')"这条语句试了还是无结果
----------------------------------------------------
我确定函数与数据表都在market这个数据库里,去掉USE MARKET就有结果了!这是为什么呢? 展开
1个回答
展开全部
函数没有错误.
请你直接用SELECT * FROM ORDERS WHERE 货品名称='内存卡' 试试
或函数中改成语句改成:
RETURN (SELECT * FROM orders WHERE 货品名称 like '%'+@goodsn+'%')试试
我认为你条件里的字符品与表中不大一至,比如空单或全角空格,或是存在一些乱码字符.或是存在看不见的控制符.
==============================
我知道你的意思,但是我说了,你的存储过程可以输出,是正常的,我都试过了,有输出,如果说不正常,我认为是你的数据有误差,所以让你按下面一行改函数,或者规范你的表中的数据.
用上面的语句试验,不要说肯定有结果,要先试.
如果上面的语句有结果,那么函数也会有输出,请您试一下,好吗?
=========================
那么你干脆换成
RETURN (SELECT top 10 * FROM orders)
试试
另外,你确认你是在一个数据库操作的吗?
去掉USER MARKET
直接分别试语句和函数
注意你修改过的函数 与 有数据的表 是否在一个数据库量面
请你直接用SELECT * FROM ORDERS WHERE 货品名称='内存卡' 试试
或函数中改成语句改成:
RETURN (SELECT * FROM orders WHERE 货品名称 like '%'+@goodsn+'%')试试
我认为你条件里的字符品与表中不大一至,比如空单或全角空格,或是存在一些乱码字符.或是存在看不见的控制符.
==============================
我知道你的意思,但是我说了,你的存储过程可以输出,是正常的,我都试过了,有输出,如果说不正常,我认为是你的数据有误差,所以让你按下面一行改函数,或者规范你的表中的数据.
用上面的语句试验,不要说肯定有结果,要先试.
如果上面的语句有结果,那么函数也会有输出,请您试一下,好吗?
=========================
那么你干脆换成
RETURN (SELECT top 10 * FROM orders)
试试
另外,你确认你是在一个数据库操作的吗?
去掉USER MARKET
直接分别试语句和函数
注意你修改过的函数 与 有数据的表 是否在一个数据库量面
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询