存儲過程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)+'%'