摘要:
参考下面sp_executesql单个输出参数,@I变量为动态列名,列名后缀n或是c,为了比较更新前后值是否发生了变化,分别做了两次SELECT取值,程代码冗余和产生不容忽视性能的问题。:View Code SET@sql=N'SELECT@N=['+CONVERT(NVARCHAR(MAX),@I)+'n]FROM#inserted'EXECUTEsp_executesql@sql,N'@NDECIMAL(18,0)OUTPUT',@NnOUTPUT;SET@sql=N'SELECT@O=['+CONVERT(NVARCHAR( 阅读全文
摘要:
C#中有如下bool判断:第一种:boolisExist=false;if(isExist==true){//...}第二种:boolisExist=false;if(isExist){//...}T-SQL中判断记录是否存在:第一种:IF(SELECTCOUNT(*)FROM[tableName])>0BEGIN--...ENd第二种:IFEXISTS(SELECTTOP11FROM[tableName])BEGIN--...ENdInsus.NET的选择,不管是C#还是T-SQL均为第二种。 阅读全文
摘要:
平常时写触发器(TRIGGER),一般会分别写插入(INSERT),删除(DELETE)和更新(UPDATE)单独的触发器。但是有时候,可以视看处进逻辑程度,可以把三者写成一个触发器,只是在其中稍作判断而已。你可以根据从下面方法判断触发器是是处理了插入,删除还是更新触发的:View Code --宣告两个变量DECLARE@DBIT=0DECLARE@IBIT=0--如果在DELETED内部临时触发表找到记录,说明旧数据被删除IFEXISTS(SELECTTOP11FROMDELETED)SET@D=1--如果在INSERTED内部临时触发表找到记录,说明有新数据插入IFEXISTS(SELE 阅读全文
摘要:
客户要求,要对一个敏感数据表进行Audit跟踪。如果记录被更新时,要把旧新保存起来,是谁更改了记录,什么时候更新的等相关信息。还有一个主要问题就是客户不确定具体要跟踪那个字段,希望自己决定。Insus.NET解决这个问题,只有创建另外一个表,将存储用户决定要跟踪的表,以及这个表中需要跟踪的字段。还要创建另外一个表[Audit],就是存储跟踪记录的表:Audit SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOSETANSI_PADDINGONGOCREATETABLE[dbo].[Audit]([Audit_nbr][int]IDENTITY(1,1)NOTN 阅读全文