朋友们晚上好:
又来打扰各位真的不好意思啊!不过为了学习我还是来了,问题如下,请高手指教…… 有两个表:zhuce和jiaoyi(“注册”表和“交易”表) 表zhuce有列ID、name、a1、a2(自动ID、用户名、赠币、兑换币) 其中ID=1 name="19180108" a1=50 a2=1000 (意思是:用户19180108有50枚赠币1000枚兑换币) 表jiaoyi有列ID、name、b1、b2、b3、b4(自动ID、用户名、交易类别、支出、存入、余额) 其中ID=1 name="x" b1="gszz" b4=10000 (意思是:x部门的公司总帐余额为10000枚兑换币) 说明:公司总帐和交易明细在同一张表上,总帐固定在id=1行中,交易明细根据交易顺序插入, b1="gszz"表示公司总帐, b1="jymx"表示交易明细,如果用户交易额小于赠币,那么只扣除用户赠币, 不产生交易记录,如果大于赠币,则扣除用户兑换币并记录交易明细。 例:用户19180108购买x部门产品需100枚(赠币或兑换币)的程序如下(文字程序) 取19180108用户赠币比较是否大于支出额,如大于则a1=a1-支出额,保存数据,返回值1。 否则a2=a2-支出额,(如果a2小于支出额,则中断操作返回值2)保存数据,并且在表jiaoyi中记录结果, 返回值3
此例各表结果如下:
表zhuce: ID=1 name="19180108" a1=50 a2=900 表jiaoyi:ID=1 name="x" b1="gszz" b4=10100 ID=2 name="19180108" b1="jymx" b2=100 b4=900 ID=3 name="x" b1="jymx" b3=100 b4=10100 要求:三个输入参数(用户名、部门名、交易额), 一个返回值(1表示赠币交易、2表示帐户额不够中断交易、3表示交易成功)。
以上程序完全用存储过程完成,在ASP中调用一次即可。
又来打扰各位真的不好意思啊!不过为了学习我还是来了,问题如下,请高手指教…… 有两个表:zhuce和jiaoyi(“注册”表和“交易”表) 表zhuce有列ID、name、a1、a2(自动ID、用户名、赠币、兑换币) 其中ID=1 name="19180108" a1=50 a2=1000 (意思是:用户19180108有50枚赠币1000枚兑换币) 表jiaoyi有列ID、name、b1、b2、b3、b4(自动ID、用户名、交易类别、支出、存入、余额) 其中ID=1 name="x" b1="gszz" b4=10000 (意思是:x部门的公司总帐余额为10000枚兑换币) 说明:公司总帐和交易明细在同一张表上,总帐固定在id=1行中,交易明细根据交易顺序插入, b1="gszz"表示公司总帐, b1="jymx"表示交易明细,如果用户交易额小于赠币,那么只扣除用户赠币, 不产生交易记录,如果大于赠币,则扣除用户兑换币并记录交易明细。 例:用户19180108购买x部门产品需100枚(赠币或兑换币)的程序如下(文字程序) 取19180108用户赠币比较是否大于支出额,如大于则a1=a1-支出额,保存数据,返回值1。 否则a2=a2-支出额,(如果a2小于支出额,则中断操作返回值2)保存数据,并且在表jiaoyi中记录结果, 返回值3
此例各表结果如下:
表zhuce: ID=1 name="19180108" a1=50 a2=900 表jiaoyi:ID=1 name="x" b1="gszz" b4=10100 ID=2 name="19180108" b1="jymx" b2=100 b4=900 ID=3 name="x" b1="jymx" b3=100 b4=10100 要求:三个输入参数(用户名、部门名、交易额), 一个返回值(1表示赠币交易、2表示帐户额不够中断交易、3表示交易成功)。
以上程序完全用存储过程完成,在ASP中调用一次即可。
nvarchar 和 varchar 的区别是存储方式不同
varchar是按字节存储的.而带 "n "的nvarchar是按字符存储的
比如说 varchar(40),能存储40个字节长度的字符,存储中文字符的时候,因为中文字符1个字符就等于2个字节.所以varchar(40)只能存储20个中文字符.
nvarchar(40),就可以存储40个中文字符,也就是说可以存储80个字节长度的字符.nvarchar要相对于存储的字符类型.比如有些字符是占3个字节的. 字符集是在安装 SQL Server 时选择的,不能更改。使用 Unicode 数据类型,列可存储由 Unicode 标准定义的任何字符,包含由不同字符集定义的所有字符。Unicode 数据类型需要相当于非 Unicode 数据类型两倍的存储空间。Unicode 数据使用 SQL Server 中的 nchar、varchar 和 ntext 数据类型进行存储。对于存储来源于多种字符集的字符的列,可采用这些数据类型。当列中各项所包含的 Unicode 字符数不同时(至多为 4000),使用 nvarchar 类型。当列中各项为同一固定长度时(至多为 4000 个 Unicode 字符),使用 nchar 类型。当列中任意项超过 4000 个 Unicode字符时,使用 ntext 类型。
name 到底是用户名,还是部门?
if object_id('zhuce') is not null drop table zhuce
go
create table zhuce (ID int identity(1,1),name varchar(20),a1 int,a2 int)
insert into zhuce
select '19180108',50,1000--> 测试数据: jiaoyi
if object_id('jiaoyi') is not null drop table jiaoyi
go
create table jiaoyi (
ID int identity(1,1),
name varchar(20),
b1 varchar(20), --类别
b2 int, --支出
b3 int, --存入
b4 int --余额
)
insert into jiaoyi
select 'x','gszz',0,0,10000
go
alter PROC Sp_Jymx
@name varchar(100),
@bm varchar(100),
@money decimal(18,2)
AS
DECLARE @M1 DECIMAL(18,2) --赠
DECLARE @M2 DECIMAL(18,2) --对SELECT @M1=a1,@M2=a2 FROM zhuce WHERE name=@name -- 自己加其它乱七八糟的情况,如 用户不存在IF @M1>=@money --赠币足够
BEGIN
--插入 用户交易明细
INSERT jiaoyi
SELECT @name,'jymx',@money,0,a2 FROM zhuce
WHERE name=@name --插入 部门交易明细
INSERT jiaoyi
SELECT @bm,'jymx',0,@money,b4+@money
FROM jiaoyi
WHERE name=@bm and ID=1 --总帐固定在id=1行中,不知道是不是这样? --更新注册
UPDATE zhuce
SET a1=a1-@money
WHERE name=@name --更新总账
UPDATE jiaoyi
SET b4=b4+@money
WHERE name=@bm and ID=1 --总帐固定在id=1行中,不知道是不是这样? RETURN 1
END
ELSE
IF @M1<@money AND @M2>=@money -- 赠币不够,兑换币足够
BEGIN
--插入 用户交易明细
INSERT jiaoyi
SELECT @name,'jymx',@money,0,a2-@money FROM zhuce
WHERE name=@name --插入 部门交易明细
INSERT jiaoyi
SELECT @bm,'jymx',0,@money,b4+@money
FROM jiaoyi
WHERE name=@bm and ID=1 --总帐固定在id=1行中,不知道是不是这样? --更新注册
UPDATE zhuce
SET a2=a2-@money
WHERE name=@name --更新总账
UPDATE jiaoyi
SET b4=b4+@money
WHERE name=@bm and ID=1 --总帐固定在id=1行中,不知道是不是这样? return 3
END
ELSE -- 赠币不够,兑换币也不够
return 2
GOEXEC Sp_Jymx '19180108','X',100SELECT * FROM ZHUCE
SELECT * FROM JIAOYI
ID name a1 a2
----------- -------------------- ----------- -----------
1 19180108 50 900(1 行受影响)ID name b1 b2 b3 b4
----------- -------------------- -------------------- ----------- ----------- -----------
1 x gszz 0 0 10100
2 19180108 jymx 100 0 900
3 X jymx 0 100 10100(3 行受影响)