存储过程isnullor
各公司的表是不同的名称,没有规律是吧?
如果有规律比如table1、table2……方便多了。
在存储过程中,直接利用循环,查询各表中的数据,累加到一个临时数值上,然后将该数值插入到汇总表。具体实现,不同的数据库有细微差别。
如果是没有规律的,则需要将各表名作为存储过程参数,比如用传入字符串table1|table2|……|tablexxx|
然后在存储过程中,解析该字符串,之后循环查询。
存储过程其实和c语言编程等编程语言实现语义上没有多大区别,逻辑清楚了,多看几个示例,就会弄了。
如果不想存储过程,也可以用触发器,在每张表上建一个触发器,将所有记录更新到汇总表。或者直接用视图,将各表的结果直接汇总select
isnull(a.期初数,0)
+
isnull(b.期初数,0)
+
……
总期初数
from
table1
a
left
join
table
2
b
on
a.年=b.年
left
join
……
where
a.年='2011'
② (SQL数据库)我想创建一个存储过程来更新表中的数据
create
procere
update_table
(
@c_tbname
varchar(128),
--
要更新的表名
@c_upcolname
varchar(1000),
--
要更新的字段列表,以豆号隔开
@c_updata
varchar(1000),
--
要更新的数据列表,以豆号隔开,要与相应的列一一对应
@c_id
varchar(100)
--
要更新的关键字,没有关键字的不能更新
)
as
begin
declare
@c_sql
varchar(max)
declare
@i_bcol
int
declare
@i_ecol
int
declare
@i_bdata
int
declare
@i_edata
int
if
@c_id
is
null
or
@c_id
=
''
return
set
@i_bcol=
1
set
@i_bdata=
1
set
@c_sql
=
'
update
'
+
@c_tbname
+
'
set
'
set
@i_ecol
=
charindex(','
,
@c_upcolname
,
@i_bcol
)
while
@i_ecol
>
0
begin
set
@c_sql
=
@c_sql
+
substring(
@c_upcolname,@i_bcol,@i_ecol
-
1
)
+
'
=
'
set
@i_edata=
charindex(','
,
@c_updata,
@i_bdata)
set
@c_sql
=
@c_sql
+
''''
+
substring(
@c_updata,@i_bdata,@i_edata-
1
)
+
'''
,'
set
@i_bcol
=
@i_ecol
+
1
set
@i_ecol
=
charindex(','
,
@c_upcolname
,
@i_bcol
)
end
set
@c_sql
=
@c_sql
+
substring(
@c_upcolname,@i_bcol,len@c_upcolname)
-
1
)
+
'
=
'
set
@c_sql
=
@c_sql
+
''''
+
substring(
@c_updata,@i_bdata,len(@c_updata)-
1
)
+
'''
'
set
@c_sql
=
@c_sql
+
'
where
id
=
'''
+
@c_id
+
'''
'
exec
(
@c_sql
)
end
③ SQL存储过程中,if判断语句中有多个判断条
if(@rq2 is null or @rq2!=@a11) //多个判断条件
begin
处理
end
else
begin
处理
end
④ SQL:存储过程中的like问题!
like '%'+rtrim(@para1)+'%'