SqlServer查询 SELECT 赋值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SqlServer查询 SELECT 赋值相关的知识,希望对你有一定的参考价值。

--生成测试数据
CREATE TABLE #TEST
(
FID int primary key identity(1,1),
Fname nvarchar(20),
FDebit money, --借
FLend money, --贷
FBalance money, --余额
FReason nvarchar(500),
FCheckOrder bit
)
INSERT INTO #TEST
SELECT '张三',50,0,50,'出库',0
UNION ALL
SELECT '张三',70,0,120,'出库',1
UNION ALL
SELECT '张三',90,0,210,'出库',1
UNION ALL
SELECT '李四',80,0,80,'出库',0
UNION ALL
SELECT '张三',0,70,140,'对账',1
UNION ALL
SELECT '张三',0,90,50,'对账',1

SELECT * FROM #TEST
/*现要到达以下效果,将客户张三对账的数据冲掉即重新写2笔数据
1 张三 50.00 0.00 50.00 出库 0
2 张三 70.00 0.00 120.00 出库 0
3 张三 90.00 0.00 210.00 出库 0
4 李四 80.00 0.00 80.00 出库 0
5 张三 0.00 70.00 140.00 对账 1
6 张三 0.00 90.00 50.00 对账 1
7 张三 70.00 0.00 120.00 冲红 1
8 张三 90.00 0.00 210.00 冲红 1
*/
--用SELECT插入数据,问题在于余额的计算
--也就是每一行数据的检索应该是动态取得该客户最后一次余额
--但SELECT插入模式下必须要数据检测完才进行插入,
--所以我用自定义函数GetLastBalance()总只能取得未插入前的最后Balance
INSERT INTO #TEST
(
FName,FDebit,FLend,FBalance,FReason,FCheckOrder
)
SELECT FName,FLend,FDebit,FBalance/*GetLastBalance(FName)+FLend*/,'冲红',1
FROM #TEST
WHERE Fname='张三' AND FReason='对账'

--删除临时表
DROP TABLE #TEST

参考技术A 只说思路:
1.要定义好每一种业务是借还是贷,比如出库是贷 入库是借
2.每一笔数据都应该有一条流水记录
3.关于余额的计算,根据上面的业务设置和流水就可以轻松计算出当前余额来
比例
1.入库 100
2.出库 200
3.冲红 300
余额 = 100×1 + 200×-1 + 300*1 = 400

sqlserver 存储过程中变量赋值

sqlserver 存储过程中变量赋值 declare @cc int set @cc=(select count(1) from tablename) 或 select @cc=count(1) from tablename
在下面是用的时候都没有值,例如:
if @cc = 0
这个判断失效,但是当在判断前面加select @cc的时候就可以,不知道为什么,请帮助回答一下,多谢

参考技术A 你没有把问题写多明白啊不过看你得描述,应该是在 as后面声明的局部变量。按你得用法绝对是没有问题的,我试过没问题啊。你说的“if @cc = 0这个判断失效”是什么意思呢?是表里面有记录自然@cc!=0,,“在判断前面加select @cc的时候就可以”又是什么意思?执行存储过程的话,if只是判定条件只有select才会打印出数据~~~~~~~ 参考技术B 先用select count(1) from tablename,判断是否有满足条件的记录,sql对null的判断不太友好 参考技术C 能不能给出完整代码? 参考技术D 当查询的结果没有记录时,@cc的值可能为null
需要看你具体的代码是什么
第5个回答  2011-08-10 654645

以上是关于SqlServer查询 SELECT 赋值的主要内容,如果未能解决你的问题,请参考以下文章

SQLserver 怎么声明变量?

sqlserver 存储过程中变量赋值

sql server 用变量定义表名,能够查询

SELECT与SET对变量赋值

存储过程给变量赋值

mysql 如何给变量赋一个动态sql执行的结果