如何用c语言做网站,wordpress页脚二维码,国外建站主机,wordpress jae这段时间接手一个数据操作记录的功能#xff0c;刚拿到手上的时候打算用EF做#xff0c;后来经过仔细考虑最后还是觉定放弃#xff0c;最后思考再三决定#xff1a;1、以模块为单位分表、列固定(其实可以所有的操作记录都放到同一个表#xff0c;但是考虑到数据量大的时候…这段时间接手一个数据操作记录的功能刚拿到手上的时候打算用EF做后来经过仔细考虑最后还是觉定放弃最后思考再三决定1、以模块为单位分表、列固定(其实可以所有的操作记录都放到同一个表但是考虑到数据量大的时候查询性能的问题还是分表吧)列主键ID、引用记录主键ID、操作时间、操作类型、详细信息(里面存储的就是序列化后的值)2、在客服端解析保存的序列化的值但是用xml还是用json呢这有是一个问题显然用xml在存储过程正很容易就能生成了:SELECT * FROM TABLE FOR XML AUTO 就ok了但是用xml的话在客服端解析就麻烦些了所以弃用了xml保存而使用了最爱的json现在的问题就是写一个通用的存储过程来生成json了经过我1天多的拼写终于出炉了(其实难度不大就是拼字符串容易出错)/*获取JSON格式数据TableName varchar(100):表名ColumnIn nvarchar(100):列名用于判断,ColumnValues nvarchar(max)值aaa,bbb,ccc,Condition NVARCHAR(max)条件(and 11)Json varchar(max) OUTPUT:生成的JSON数据Limit int NULL 取前多少条为null 取所有ConvertColumns NVARCHAR(max)null:要转换的列(目前已经排除为nvarchar(max)的列)*/create PROC uspGetJSON(TableName varchar(100),ColumnIn nvarchar(100),ColumnValues nvarchar(max),Condition NVARCHAR(max),Json varchar(max) OUTPUT,Limit int NULL,ConvertColumns NVARCHAR(max)null--SortColumn nvarchar(100)null,--SortType nvarchar(10)asc)AS--if(SortColumn is null)--set SortColumnLastModifiedDatedeclare query varchar(max),table_schema varchar(max) nullif(charindex(., TableName) 0 )beginset table_schema replace(replace( substring(TableName, 0, charindex(.,TableName)), [, ), ], )set TableName replace(replace( substring(TableName, charindex(.,TableName) 1,len(TableName)), [, ), ], )ENDIF EXISTS ( SELECT 1 FROM tempdb..sysobjects WHERE id OBJECT_ID(tempdb..#tmpJsonTable) )DROP TABLE #tmpJsonTableCREATE TABLE #tmpJsonTable(json NVARCHAR(max) NULL)--ddset query insert into #tmpJsonTable select case when Limit is not null then top cast(Limit as varchar(32)) else end { REVERSE(STUFF(REVERSE( CAST((SELECT column_name : ----处理为null的问题case WHEN is_nullable YES then case when [ column_name ] is null then null else --处理前缀case WHEN data_typeuniqueidentifieror data_type like %date% or data_type like %char% or data_type like %text% then else end /*类型转换*/case WHEN data_type like %date% then convert(varchar(23),[ column_name ], 20) else replace(replace(replace(replace(replace(cast([ column_name ] as varchar(max)),\,\\),,\),char(10),\n),char(13),\n),char(9),\t) end --处理后缀case WHEN data_typeuniqueidentifier or data_type like %char% or data_type like %text% then else end end ELSE--处理前缀case WHEN data_typeuniqueidentifier or data_type like %date% or data_type like %char% or data_type like %text% then else end /*类型转换*/case WHEN data_type like %date% then convert(varchar(23),[ column_name ], 20) else replace(replace(replace(replace(replace(cast([ column_name ] as varchar(max)),\,\\),,\),char(10),\n),char(13),\n),char(9),\t) end --处理后缀case WHEN data_typeuniqueidentifierOR data_type LIKE date% or data_type like %char% or data_type like %text% then else end end ,AS [text()]from information_schema.columnswhere table_name TableNameand (character_maximum_length IS NULL OR character_maximum_length!-1)AND(ConvertColumns IS NULL OR COLUMN_NAME IN(SELECT MyValues FROM dbo.funSplitArray(ConvertColumns,,)))and (table_schema is null or table_schema table_schema) FOR XML PATH() ) as varchar(max)) ),1,1,)) } as json from TableName with(nolock) where (ColumnIn in (Select MyValues from dbo.funSplitArray(ColumnValues,,))) Condition-- ORDER BY SortColumn SortTypeexec sp_sqlexec query--SELECT queryset Json --{ char(10) char(9) --recordCount : Cast((select count(*) from #tmpJsonTable) as varchar(32)) , char(10) char(9) --records : char(10) char(9) char(9) [ char(10) REVERSE(STUFF(REVERSE(CAST((SELECT char(9) char(9) json , char(10) AS [text()] FROM #tmpJsonTable FOR XML PATH()) AS varchar(max))),1,2,)) char(10) char(9) char(9) ]-- char(10) }drop table #tmpJsonTable--DECLARE table_name varchar(100)SalesOrder,-- ConvertColumns NVARCHAR(max)SalesOrderNo,SalesOrderID,-- Condition NVARCHAR(max),-- json varchar(max)--EXEC GetJSON table_nametable_name,ConvertColumnsConvertColumns,ConditionCondition,jsonjson OUTPUT--SELECT json调用这个存储过程使用输出参数就可以得到序列化后的json数据了。至此就差在客服端解析了。打算写个方法根据传递过来的json对象参数来动态解析这样 ui页面上也不需要用每个地方都去解析了....--用到的自定义函数CREATE function [dbo].[funSplitArray](aString varchar(max),pattern varchar(10))returns temp table([Sid] [int] IDENTITY (1, 1) NOT NULL ,Myvalues varchar(100))--实现split功能的函数--说明aString字符串如“27,28,29”pattern分隔标志如“ ,”--使用select Myvalues FROM my_split(字符串, ,)asbegindeclare i intset aStringrtrim(ltrim(aString))set icharindex(pattern,aString)while i1begininsert temp values(left(aString,i-1))set aStringsubstring(aString,i1,len(aString)-i)set icharindex(pattern,aString)endif aStringinsert temp values(aString)returnend