SQL應用之根據資料庫表生成Extjs的model

2021-07-22 18:47:18 字數 2790 閱讀 6689

在做extjs開發時,介面grid的展示也是需要model(js)。這些model的資料最終肯定全部來自資料庫,雖然不一定完全對應一張表,但是多數情況下,model欄位與資料庫幾乎是完全對應的。當資料庫表較多,表的字段也較多時,這時你才會意識到寫乙個sql指令碼片斷,能夠自動拼接出extjs的model的js指令碼是多麼省時的事!

用寫程式生成extjs的model的方式也是可以的,也有人曾想過使用 entity framework等模板生成器來做。但個人認為還是沒有直接寫sql片斷來得快,而且同樣是一勞永逸的事,快速方便。

-- @prefix是表的字首的查詢條件

declare @prefix varchar(50) = 'cms_data_'

declare @table table(rownum int,tabelname varchar(50),fieldname varchar(50),type varchar(50))

insert

into @table

select row_number() over(order

by obj.name,column_id),obj.name tablename,col.name,

case

when tp.name in('date','datetime','datetime2','smalldatetime') then

'date'

when tp.name in('int','bigint') then

'int'

when tp.name in('bit') then

'boolean'

when tp.name in('float','real','money','decimal','numeric','smallmoney') then

'float'

else

'string'

endas [type]

from sys.all_columns col

left

join sysobjects obj on obj.id = col.object_id

left

join sys.types tp on tp.user_type_id = col.user_type_id

where xtype='u'

and category=0

and obj.name like @prefix + '%'

select * from @table

declare @tablename varchar(50) = '',@lasttable varchar(50),@sql

varchar(8000) = '',

@fieldname varchar(50),@type varchar(50)

declare @cur int = 1,@max

int = (select

count(*) from @table),@tmpindex int = 0

while @cur <= @max

begin

select @tablename = tabelname,@fieldname = fieldname,@type = [type] from @table

where rownum = @cur

--print @tablename + ',' + @fieldname

-- 初始化(第一行)

if @lasttable is

null

begin

set @lasttable = @tablename

end-- 處理輸出

if @tablename <> @lasttable

begin

set @tmpindex = charindex('_',@lasttable,charindex('_',@lasttable,1) + 1)

print

'/**

*@description ' + stuff(@lasttable,1,@tmpindex,'') + '

*/ext.define(''' + @prefix + '.' + stuff(@lasttable,1,@tmpindex,'') + 'model'', );'

-- 重置狀態

set @lasttable = @tablename

-- 清空@sql

set @sql = ''

end -- 處理每一行資料

if @lasttable = @tablename

begin

set @sql += ',

'if @lasttable is

null

begin

set @lasttable = @tablename

endend --print @sql

set @cur += 1

end-- 最後一張表的輸出

if @sql

isnot

null

begin

set @tmpindex = charindex('_',@lasttable,charindex('_',@lasttable,1) + 1)

print

'/**

*@description ' + stuff(@lasttable,1,@tmpindex,'') + '

*/ext.define(''' + @prefix + '.' + stuff(@lasttable,1,@tmpindex,'') + 'model'', );'

end

Django根據資料庫表反向生成Model

用過django的人應該都熟悉下面兩條命令 python manage.py make migrations 此時資料庫中還不會生效 既然有根據model自動生成資料庫表的命令,那麼肯定就有根據資料庫表反向生成model的命令 python manage.py inspectdb 使用這條命令,會根...

根據資料庫生成 sql insert 資料

create procedure dbo.uspoutputdata tablename sysname as declare column varchar 1000 declare columndata varchar 1000 declare sql varchar 4000 declare x...

根據資料庫結構生成TreeView

現在大多數的方法是採用遞迴,但這種操作會頻繁的去select資料庫,降低了執行效率,稍微改動一些,效果會好不少,這裡介紹一種方法,即一次性select出所有資料,然後按照parentid排序,逐條新增到treeview,新增前,先遍歷treeview,查詢他的上一級節點,遍歷treeview可比se...