弱弱的问句:2000中的update语句中不能使用自定义函数么?INSERT DELETE中也不行?
如下:--更新
UPDATE #t SET gg=DBO.GetGG(na),
na=REPLACE(na,ISNULL(DBO.GetGG(na),''),'')--MS-SQL SERVER2008中测试通过,是可以这样用。别人拿代码在2000中报错:服务器: 消息 208,级别 16,状态 1,行 1
对象名 'DBO.GetGG' 无效。
服务器: 消息 208,级别 16,状态 1,行 1
对象名 'DBO.GetGG' 无效。要改成以下这样么?以下2008依然是正确的UPDATE #t SET gg=DBO.GetGG(na),
na=REPLACE(na,ISNULL(DBO.GetGG(na),''),'')
FROM #t
2000的一些规则不熟悉啊..我看书上没提在自定义函数的使用上2005以及以上版本较2000有了较大的更改呀.求解释..
如下:--更新
UPDATE #t SET gg=DBO.GetGG(na),
na=REPLACE(na,ISNULL(DBO.GetGG(na),''),'')--MS-SQL SERVER2008中测试通过,是可以这样用。别人拿代码在2000中报错:服务器: 消息 208,级别 16,状态 1,行 1
对象名 'DBO.GetGG' 无效。
服务器: 消息 208,级别 16,状态 1,行 1
对象名 'DBO.GetGG' 无效。要改成以下这样么?以下2008依然是正确的UPDATE #t SET gg=DBO.GetGG(na),
na=REPLACE(na,ISNULL(DBO.GetGG(na),''),'')
FROM #t
2000的一些规则不熟悉啊..我看书上没提在自定义函数的使用上2005以及以上版本较2000有了较大的更改呀.求解释..
select * from sysobjects where Name='GetGG'--查看
CREATE TABLE #t
(
na VARCHAR(20),
gg VARCHAR(10)
);INSERT INTO #t ( na )
SELECT '可口可乐500ml' UNION ALL
SELECT '500ml可口可乐' UNION ALL
SELECT '旺仔QQ糖32g' UNION ALL
SELECT '可比克35g薯片' UNION ALL
SELECT '晨奇中性笔GP-148' UNION ALL
SELECT '114BY文具盒' UNION ALL
SELECT '2.5kg白糖' UNION ALL
SELECT '晨奇148象皮擦'
GO -- 根据单位,获取 规格内容
CREATE FUNCTION DBO.GetGGByUnit(@na VARCHAR(20), @u VARCHAR(5))
RETURNS VARCHAR(10)
AS
BEGIN
-- 单位的位置.
DECLARE @idx INT
DECLARE @idx2 INT
-- 返回值.
DECLARE @returnValue VARCHAR(10)
-- 初始化.
SET @returnValue = NULL
-- 取得单位的位置.
SET @idx = CHARINDEX(@u, @na)
IF @idx + LEN(@u) - 1 = LEN(@na)
BEGIN
-- 这个 单位的 位置,是在名称的末尾
-- 需要向前找数字.
SET @returnValue = RIGHT(@na, LEN(@na) - PATINDEX('%[0-9]%', @na) + 1)
END
ELSE
BEGIN
-- 这个 单位的 位置, 不是在名称的末尾, 可能是在开头, 可能在中间
SET @idx2 = PATINDEX('%[0-9]%', @na);
IF @idx2 > @idx
BEGIN
-- 单位 与 数字的 关系
-- 是 先单位 后 数字的。是无效的数据.
SET @returnValue = NULL;
END
ELSE
BEGIN
-- 数字 在 单位 前面.
SET @returnValue = SUBSTRING(@na, @idx2, (@idx - @idx2 + 2) );
END
END
-- 返回.
RETURN @returnValue;
END;
GO -- 获取 规格内容
CREATE FUNCTION DBO.GetGG(@na VARCHAR(20))
RETURNS VARCHAR(10)
AS
BEGIN
-- 返回值.
DECLARE @returnValue VARCHAR(10)
-- 初始化.
SET @returnValue = NULL
-- 这里根据需要,自行增加各种单位
IF CHARINDEX('ml', @na) > 0
BEGIN
SET @returnValue = DBO.GetGGByUnit(@na, 'ml')
END
ELSE IF CHARINDEX('kg', @na) > 0
BEGIN
SET @returnValue = DBO.GetGGByUnit(@na, 'kg')
END
ELSE IF CHARINDEX('g', @na) > 0
BEGIN
SET @returnValue = DBO.GetGGByUnit(@na, 'g')
END
-- 返回.
RETURN @returnValue
END;
GO
--更新
UPDATE #t SET gg=DBO.GetGG(na),
na=REPLACE(na,ISNULL(DBO.GetGG(na),''),'')
---
--UPDATE #t SET gg=DBO.GetGG(na),
-- na=REPLACE(na,ISNULL(DBO.GetGG(na),''),'')
-- FROM #t
---
SELECT * FROM #t--删除演示环境
DROP FUNCTION DBO.GetGGByUnit,DBO.GetGG
DROP TABLE #TMS SQL SERVER2008中OK的,听人家在2000里运行返回说出错,我想确定下2000中是否可以在UPDATE中和INSERT、DELETE语句中使用自定义函数。
'114BY文具盒' --这条用不用取114BY
SELECT '500ml可口可乐' UNION ALL
SELECT '旺仔QQ糖32g' UNION ALL
SELECT '可比克35g薯片' UNION ALL
SELECT '晨奇中性笔GP-148' UNION ALL
SELECT '114BY文具盒' UNION ALL
SELECT '2.5kg白糖' UNION ALL
SELECT '晨奇148象皮擦'-------------把结果贴出来看看
嗯 谢谢大家..不是代码问题 2000中确实能在UPDATE\INSERT \DELETE中使用自定义函数.运行时搞错了.