如果你是一個數據庫工作者,或者是一個代碼編寫者,你是否為填寫那些字段煩惱呢?少還好說,如果達到幾十個,你一定會被弄得昏頭暈腦,一下就失去了編寫代碼的快樂。
好了,用以下的方法使你省略了填寫字段的煩惱,一下子就能夠達到編寫代碼的性高潮!實在是居家旅游,必備良藥,勝過偉哥!
第一步,建立視圖! create VIEW Col AS select b.Name ColName, b.ColID, c.Name xColtype, (select Name from systypes where xUserType = c.xType and xType = xUserType) ColType,/*convert user define type to system type*/ b.Length Sizes, b.Prec Prec, b.xScale Scale, convert(bit,b.status&8) Nulls, a.Name ObjectName, a.Type ObjectType from sysobjects A,syscolumns b,systypes c where a.type in ('U','V','P') and a.Id=b.Id and b.Xusertype=c.Xusertype
第一步,建立存儲過程! CREATE PROCEDURE sysgetcol @objectname Char(80) AS declare @objecttype char(10) select @objecttype = objecttype from COL where objectname = @objectname
if @@ROWCOUNT = 0 begin Print 'Internal Error(001):' Print ' not found object :''' + Rtrim(@objectname) +'''!' Return -1 end
select colname, colType types, xColType, sizes, prec, scale, colid, Nulls Into #temp from COL where objectname = @objectname order by colid --PATINDEX('%pattern%', expression)
--Script object Structure if @objecttype = 'U' begin select 'Create Table ' + Rtrim(@objectname) + ' (' union all select ' ' + Rtrim(colname) + ' ' + RTrim(xColType)+ Case xColType when 'Char' then '('+RTrim(Convert(Char(3),sizes))+')' when 'Numeric' then '(' + RTrim(Convert(Char(3),Prec)) + ',' + RTrim(Convert(Char(3),Scale)) + ')' when 'Varchar' then '('+RTrim(Convert(Char(3),sizes))+') ' when 'nchar' then '(' + RTrim(Convert(Char(3) ,sizes)) + ')' when 'nvarchar' then '(' + RTrim(Convert(Char(3) ,sizes)) + ')' else '' end + case nulls when 0 then' Not Null' else '' end + ' ,' from #temp union all select ')' end
/*Building select statement*/
select 'CREATE VIEW view_' + RTrim(@objectname) + ' AS' + Char(10) + 'select ' union all select ' '+RTrim(colname)+',' from #temp --order by colid union all select 'from '+ RTrim(@objectname)
/******update #temp set sizes=Null where Types<>'Char'******/ --bulid procedure parameter select 'CREATE PROCEDURE ' + RTrim(@objectname) + '_Update' UNION ALL select ' @' + RTrim(colname) + ' ' + RTrim(xColType)+ Case xColType when 'Char' then '('+RTrim(Convert(Char(3),sizes))+') ,' when 'Numeric' then '(' + RTrim(Convert(Char(3),Prec)) + ',' + RTrim(Convert(Char(3),Scale)) + ') ,' when 'Varchar' then '('+RTrim(Convert(Char(3),sizes))+') ,' when 'nchar' then '(' + RTrim(Convert(Char(3) ,sizes)) + ')' when 'nvarchar' then '(' + RTrim(Convert(Char(3) ,sizes)) + ')' else ' ,' end from #temp --order by colid UNION ALL select 'AS' /*Building update part*/ UNION ALL select ' update ' + RTrim(@objectname) + ' set' UNION ALL select ' '+RTrim(colname)+' = @'+RTrim(colname)+' ,' from #temp-- order by colid Union All select ' where ' Union All select ' '+RTrim(colname)+' = @'+RTrim(colname)+' and' from #temp-- order by colid UNION ALL /*update #temp set sizes=Null*/
/*Building Insert statement*/ select ' if @@ROWCOUNT = 0' UNION ALL select ' insert into ' + Rtrim(@objectname) + '(' UNION ALL select ' '+RTrim(colname)+' ,' from #temp-- order by colid UNION ALL select ' )' UNION ALL select ' values(' UNION ALL select ' @'+RTrim(colname)+' ,' from #temp --order by colid UNION ALL select ' )'
select ' '+RTrim(colname)+' = Trim(request("'+RTrim(colname)+'"))' from #temp
select ' '+RTrim(colname)+' = Trim(rs("'+RTrim(colname)+'"))' from #temp --order by colid
select ' .parameters('+Rtrim(colid)+') = '+ colname from #temp --order by colid GO
第三步,使用該存儲過程! 假設你的數據庫里有一個叫做Nta_base_member的表 Create Table Nta_base_member ( m_id bigint Not Null , m_type smallint , m_state smallint , memberid bigint , travelco_id bigint )
打開你的查詢分析器,鍵入 sysgetcol Nta_base_member
然后按ctrl+t,然后按F5,看看查詢分析器出現什么東東?
所影響的行數為 5 行)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Create Table Nta_base_member ( m_id bigint Not Null , m_type smallint , m_state smallint , memberid bigint , travelco_id bigint , )
(所影響的行數為 7 行)
---------------------------------------------------------------------------------------------------------------------------------- CREATE VIEW view_Nta_base_member AS select m_id, m_type, m_state, memberid, travelco_id, from Nta_base_member
(所影響的行數為 7 行)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- CREATE PROCEDURE Nta_base_member_Update @m_id bigint , @m_type smallint , @m_state smallint , @memberid bigint , @travelco_id bigint , AS update Nta_base_member set m_id = @m_id , m_type = @m_type , m_state = @m_state , memberid = @memberid , travelco_id = @travelco_id , where m_id = @m_id and m_type = @m_type and m_state = @m_state and memberid = @memberid and travelco_id = @travelco_id and if @@ROWCOUNT = 0 insert into Nta_base_member( m_id , m_type , m_state , memberid , travelco_id , ) values( @m_id , @m_type , @m_state , @memberid , @travelco_id , )
(所影響的行數為 34 行)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- m_id = Trim(request("m_id")) m_type = Trim(request("m_type")) m_state = Trim(request("m_state")) memberid = Trim(request("memberid")) travelco_id = Trim(request("travelco_id"))
(所影響的行數為 5 行)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- m_id = Trim(rs("m_id")) m_type = Trim(rs("m_type")) m_state = Trim(rs("m_state")) memberid = Trim(rs("memberid")) travelco_id = Trim(rs("travelco_id"))
(所影響的行數為 5 行)
------------------------------------------------------------------------------------------------------------------------------------------------------- .parameters(1) = m_id .parameters(2) = m_type .parameters(3) = m_state .parameters(4) = memberid .parameters(5) = travelco_id
(所影響的行數為 5 行)
看到生成的代碼,你應該明白什么了吧?呵呵,ctrl+c到你要寫的代碼里了,爽吧,。。。。。。。。。。。。高潮,射了~
◇ 廣告時間: 數據庫代碼,文檔由86fifa編寫整理。 NB聯盟提供專業級的網站程序開發,數據庫開發,收費技術支持、安全顧問服務
聯系方式: QQ組:1019634 (NB聯盟) 主頁:http://www.54NB.com
|