测试 字符类型的值是否可以更新到MONEY 类型的列 ,我以为是不可以的,没有想到`````应该是有些可以 ,手懒了, SET 早餐='123456',转换成功.于是乎 杯具就发生了
-----------------------------杯具表----------------------------------------------------
三餐编号
三餐编号 日期 星期 早餐(MONEY) 早餐食谱
110401 2011-04-01 星期五 123456.00 粉干;豆浆
110402 2011-04-02 星期六 123456.00 一碗八宝粥;一根油条,豆腐老
110403 2011-04-03 星期日 123456.00 馄饨,豆腐老
110404 2011-04-04 星期一 123456.00 粉干;豆腐花
110405 2011-04-05 星期二 123456.00 粉干;豆腐花
110406 2011-04-06 星期三 123456.00 粉干;油条
110407 2011-04-07 星期四 123456.00 八宝粥;两根油条
110408 2011-04-08 星期五 123456.00 泡粉:2.2;豆腐花:1.0
110409 2011-04-09 星期六 123456.00 八宝粥;2根油条
110410 2011-04-10 星期天 123456.00 泡粉
--------------------------------------------------------------------------------------------------------------------另一张备份表的(备份表)------------------------------------------------
三餐编号 日期 星期 早餐(MONEY) 早餐食谱
110401 2011-04-01 星期五 3.50 粉干;豆浆
110402 2011-04-02 星期六 3.10 一碗八宝粥;一根油条,豆腐老
110403 2011-04-03 星期日 3.50 馄饨,豆腐老
110404 2011-04-04 星期一 3.00 泡粉;豆腐花
110405 2011-04-05 星期二 3.00 泡粉;豆腐花
110406 2011-04-06 星期三 2.80 泡粉;油条
110407 2011-04-07 星期四 2.70 八宝粥;两根油条
110408 2011-04-08 星期五 3.20 泡粉:2.2;豆腐花:1.0
110409 2011-04-09 星期六 2.70 八宝粥;二根油条
---------------------------另一张备份表的--------------------------------------------------说明 :备份表有些没有杯具表的一些记录能不能根据备份表的早餐来修正杯具表的早餐?-------------------早餐食谱价格表--------------------------
食谱编号 食谱名称 食谱别称 价格
11001 粉干 泡粉 2.00
11002 豆浆 NULL 1.50
11003 油条 0.60
11004 八宝粥 NULL 1.20
11005 豆腐花 豆腐老 1.00
11006 馄饨 NULL 2.50
-----------------------------------------------------------
弱弱问一下: 能不能 根据早餐食谱价格表来更新杯具表的早餐花销?
比如
110403 2011-04-03 星期日 123456.00 混沌,豆腐老
110404 2011-04-04 星期一 123456.00 粉干;豆腐花
根据食谱价格表 馄饨:2.0 豆腐老 1.5 泡粉 :2.0 来更新:
110403 2011-04-03 星期日 3.50 馄饨,豆腐老
110404 2011-04-04 星期一 3.00 泡粉;豆腐花
谢谢各位前辈的解答
无视变动
按2元计算 UPDATE 一日三餐
SET 早餐食谱=REPALCE('%粉干%','粉干','泡粉') 为什么更新不了?
但是
(112 行受影响)由于早餐食谱中粉干的位置是非确定性的
如
110401 2011-04-01 星期五 3.50 粉干;豆浆
110415 2011-04-15 星期五 3.50 豆浆;粉干
那个地方错了?
INSERT dbo.beiju
SELECT '110401', '2011-04-01', '星期五', '123456.00', '粉干;豆浆' UNION ALL
SELECT '110402', '2011-04-02', '星期六', '123456.00', '一碗八宝粥;一根油条,豆腐老' UNION ALL
SELECT '110403', '2011-04-03', '星期日', '123456.00', '馄饨,豆腐老' UNION ALL
SELECT '110404', '2011-04-04', '星期一', '123456.00', '粉干;豆腐花' UNION ALL
SELECT '110405', '2011-04-05', '星期二', '123456.00', '粉干;豆腐花' UNION ALL
SELECT '110406', '2011-04-06', '星期三', '123456.00', '粉干;油条' UNION ALL
SELECT '110407', '2011-04-07', '星期四', '123456.00', '八宝粥;两根油条' UNION ALL
SELECT '110408', '2011-04-08', '星期五', '123456.00', '泡粉:2.2;豆腐花:1.0' UNION ALL
SELECT '110409', '2011-04-09', '星期六', '123456.00', '八宝粥;2根油条' UNION ALL
SELECT '110410', '2011-04-10', '星期天', '123456.00', '泡粉'CREATE TABLE beifen(三餐编号 VARCHAR(20), 日期 VARCHAR(20), 星期 VARCHAR(10), 早餐 MONEY, 早餐食谱 VARCHAR(100))
INSERT dbo.beifen
SELECT '110401', '2011-04-01', '星期五', 3.50, '粉干;豆浆' UNION ALL
SELECT '110402', '2011-04-02', '星期六', 3.10, '一碗八宝粥;一根油条,豆腐老' UNION ALL
SELECT '110403', '2011-04-03', '星期日', 3.50, '馄饨,豆腐老' UNION ALL
SELECT '110404', '2011-04-04', '星期一', 3.00, '粉干;豆腐花' UNION ALL
SELECT '110405', '2011-04-05', '星期二', 3.00, '粉干;豆腐花' UNION ALL
SELECT '110406', '2011-04-06', '星期三', 2.80, '粉干;油条' UNION ALL
SELECT '110407', '2011-04-07', '星期四', 2.70, '八宝粥;两根油条' UNION ALL
SELECT '110408', '2011-04-08', '星期五', 3.20, '泡粉:2.2;豆腐花:1.0' UNION ALL
SELECT '110409', '2011-04-09', '星期六', 2.70, '八宝粥;2根油条'CREATE TABLE price(食谱编号 VARCHAR(20), 食谱名称 VARCHAR(10), 食谱别称 VARCHAR(10), 价格 MONEY)
INSERT dbo.price
SELECT '11001', '粉干', '泡粉', 2.00 UNION ALL
SELECT '11002', '豆浆', NULL, 1.50 UNION ALL
SELECT '11003', '油条', NULL, 0.60 UNION ALL
SELECT '11004', '八宝粥', NULL, 1.50 UNION ALL
SELECT '11005', '豆腐花', '豆腐老', 1.00 UNION ALL
SELECT '11006', '馄饨', NULL, 2.50
;
DECLARE @n INT
SET @n = 100 ;
WITH numcte
AS ( SELECT 1 AS n
UNION ALL
SELECT n + 1
FROM numcte
WHERE n < @n
)
SELECT *
INTO Nums
FROM numcte--创建一个临时数字辅助表NumsUPDATE dbo.beiju
SET dbo.beiju.早餐 = dbo.beifen.早餐
FROM dbo.beifen
LEFT JOIN dbo.beiju ON dbo.beifen.三餐编号 = dbo.beiju.三餐编号 --先根据备份表更新部分杯具表数据
;
WITH orgprice
AS ( SELECT a.三餐编号 ,
SUM(ISNULL(b.价格, 0)) AS 价格
FROM ( SELECT 三餐编号 ,
SUBSTRING(早餐食谱, n,
CHARINDEX(';', 早餐食谱 + ';', n)
- n) AS 早餐食谱
FROM dbo.beiju
JOIN dbo.Nums ON n <= LEN(早餐食谱)
AND SUBSTRING(';' + 早餐食谱,
n, 1) = ';'
WHERE 早餐 = 123456.00
) a
LEFT JOIN dbo.price b ON a.早餐食谱 = b.食谱名称
OR a.早餐食谱 = b.食谱别称
GROUP BY a.三餐编号
)
UPDATE dbo.beiju
SET 早餐 = o.价格
FROM dbo.beiju b
JOIN orgprice o ON b.三餐编号 = o.三餐编号--更新(早餐 = 123456.00,你错误更新的数据)且不在备份表的数据SELECT * FROM dbo.beiju--由于一碗,一根之类的词语比较难处理,这里需要手动更新,查询结果如果早餐列有0的话,那就是需要手动更新的DROP TABLE dbo.beiju,dbo.beifen,dbo.price,dbo.Nums
--你最好将有关表备份在尝试以上语句……
--最终结果如下:
/*
三餐编号 日期 星期 早餐 早餐食谱
-------------------- -------------------- ---------- --------------------- ----------------------------------------------------------------------------------------------------
110401 2011-04-01 星期五 3.50 粉干;豆浆
110402 2011-04-02 星期六 3.10 一碗八宝粥;一根油条,豆腐老
110403 2011-04-03 星期日 3.50 馄饨,豆腐老
110404 2011-04-04 星期一 3.00 粉干;豆腐花
110405 2011-04-05 星期二 3.00 粉干;豆腐花
110406 2011-04-06 星期三 2.80 粉干;油条
110407 2011-04-07 星期四 2.70 八宝粥;两根油条
110408 2011-04-08 星期五 3.20 泡粉:2.2;豆腐花:1.0
110409 2011-04-09 星期六 2.70 八宝粥;2根油条
110410 2011-04-10 星期天 2.00 泡粉
*/