AhDung

/*追求代码质量的野生码农*/

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  107 随笔 :: 0 文章 :: 457 评论 :: 34万 阅读

随笔分类 -  T-SQL

1

摘要:--启用CLR支持 EXEC sys.sp_configure 'clr enabled', 1 --让所在库成为可信数据库 ALTER DATABASE {dbName} SET TRUSTWORTHY ON --让数据库所有者为sa ALTER AUTHORIZATION ON DATABASE 阅读全文
posted @ 2021-06-10 14:11 ahdung 阅读(103) 评论(1) 推荐(0) 编辑

摘要:Fiddler捕获依赖的是IE代理设置,这个设置是与用户相关的,即A用户的代理设置并不影响B用户。我们通常是以普通方式打开的Fiddler,所以只能捕获到同样是以当前登录用户身份打开的软件的http通信。 而sqlclr是由sqlservr.exe进程执行的,这个进程的用户往往不是当前登录用户,而通 阅读全文
posted @ 2021-01-08 14:05 ahdung 阅读(285) 评论(0) 推荐(0) 编辑

摘要:尝试环境:.netfx2.0~4.8、.net core 3.1~5.0、SQL Server 2008 R2 SP1,发现.net版本之间及数据兼容模式如何设置没差异。 FlagNameValueDescription 1 DISABLE_DEF_CNST_CHK Controls interim 阅读全文
posted @ 2021-01-04 12:22 ahdung 阅读(144) 评论(0) 推荐(0) 编辑

摘要:市面上常见的是用MSXML2.ServerXMLHTTP这个类,但这个类在发起异步请求时并不可靠,就是当send后并不一定会发出这个请求。这里推荐改用Microsoft.XMLHTTP,如果只是简单的请求,代码基本不用变,就改一下sp_OACreate调用的OLE类名就好。 阅读全文
posted @ 2019-06-11 16:55 ahdung 阅读(832) 评论(0) 推荐(1) 编辑

摘要:由于SQL Server没有数组类型,所以在面对“从若干待选项中选一个”这种需求时,往往要采取变通办法,比如弄个‘a|b|c’这样的字符串然后对字符串进行处理;又或者把待选项塞进一个临时表,然后把问题变成如何select的问题。下面的写法就是采用后一种,只不过得益于VALUES和CTE,我们不必真的 阅读全文
posted @ 2019-06-05 09:06 ahdung 阅读(1170) 评论(2) 推荐(0) 编辑

摘要:本文适用:T-SQL(SQL Server) 先看这个语句: 如果你认为这个语句跑起来没问题,那你值得看下去,会避免以后踩到【SQL变量作用域】的坑。 事实上这个语句会报2次“违反了PRIMARY KEY约束…”,原因是@t这个表变量,并不是在每一圈都重新声明一个新的,而是声明1次后就一直沿用,由于 阅读全文
posted @ 2019-01-07 16:01 ahdung 阅读(1258) 评论(0) 推荐(2) 编辑

摘要:这个警告在常规场景中没什么影响,但如果是用excel跑SQL,它会因为该警告阻止你的后续操作~事实上excel执行sql限制多多,需要更多的奇技淫巧,之前我就写过一篇。言归正传,要解决这个警告,一种当然是在语句中用到聚合函数的地方统统加上isnull,但如果语句很长,地方很多就蛋疼了,于是我推荐另一 阅读全文
posted @ 2018-08-31 23:30 ahdung 阅读(13650) 评论(0) 推荐(0) 编辑

摘要:报错: 解决:在语句开头指定SET NOCOUNT ON 就是这么神cao奇dan。 -END- 阅读全文
posted @ 2017-09-06 12:56 ahdung 阅读(3127) 评论(1) 推荐(0) 编辑

摘要:这个表达式: 是随机返回0、1、2这三个数,不可能返回其它东西,但是如果把它用在where里面,就会发生很神奇的事情,比如这个查询: 按说每次执行会且只会得到一个0~2的数字,但多跑两次,你会得到各种神奇的结果,有返回两行的,有不返回的,肥肠蹊跷,一度让我怀疑人生,直到发现我不是一个人: https 阅读全文
posted @ 2017-08-26 15:13 ahdung 阅读(635) 评论(4) 推荐(0) 编辑

摘要:好吧,我确实不知道该怎么起这个标题,整了一个“分布”,感觉还有点高档,其实没啥技术含量,看完你就知道了。情况是这样,刚刚接到一个临时任务,需要让几个营业点的销售数据【变】少一点,就是在ERP的相关报表中,查询出来的数据要在指定区间,说白了就是那什么~你懂的,某些同行应该对这种任务很熟悉了,而有些同行... 阅读全文
posted @ 2016-01-05 18:20 ahdung 阅读(925) 评论(2) 推荐(0) 编辑

摘要:适用环境:MSSQL 2005+。其中05需修改部分语句的写法才行,如:--变量的声明和赋值需分开写DECLARE @scale INT = 0 --需改为如下DECLARE @scale INT; SET @scale = 0--05不支持+=这样的复合运算符SET @scale += 1 --需... 阅读全文
posted @ 2015-04-21 15:00 ahdung 阅读(866) 评论(0) 推荐(0) 编辑

摘要:之前写过一个合并字符串的CLR聚合函数,基本是照抄MS的示例,外加了一些处理,已经投入使用很长时间,没什么问题也就没怎么研究,近日想改造一下,遇到一些问题,遂捣鼓一番,有些心得,记录如下。一、杂项CLR聚合函数在SQL中虽然是函数,但在C#中实际上是以一个类或结构的形式存在的(是的,实现聚合函数的实... 阅读全文
posted @ 2015-03-30 09:59 ahdung 阅读(1144) 评论(0) 推荐(2) 编辑

摘要:注:解决方法在最后,心急的童鞋可以直接往下滚动。我SQL实例装的是2008 R2版,由于该版自带的SSMS(Microsoft SQL Server Management Studio 管理工具)存在一些操蛋问题,例如:- 文本编辑器中对矩形文本块(alt+鼠标左键选取)的操作支持不好,例如不能多行... 阅读全文
posted @ 2015-01-04 16:37 ahdung 阅读(2176) 评论(1) 推荐(0) 编辑

摘要:------------更新:201501071730------------评论中又有一位【笑东风】兄给出改善建议,在此先感谢他。原理是借助行数较多的一个系统视图sys.all_columns与自身做cross join,以得到大量现成行数,详情请见回复。在我的原文中我也提到考虑过这种借助现有系统... 阅读全文
posted @ 2014-12-31 13:00 ahdung 阅读(793) 评论(4) 推荐(1) 编辑

摘要:请看代码:DECLARE @max VARCHAR(max)SET @max='aaa...' --这里有8000个a +'bb' --连接一个varchar常量或变量SELECT LEN(@max)别想当然以为它会返回8002,而是8000,select @max也只会得到8000... 阅读全文
posted @ 2014-11-13 19:57 ahdung 阅读(1895) 评论(3) 推荐(1) 编辑

摘要:功能与.net版string.Split函数类似,只不过.net返回的是数组,这个返回的是一个单列表格,每个拆分出来的子串占一行。可选是否移除空格子串和重复项。市面上类似的函数不算少,但大多都是在循环中对原串进行改动,我感觉这样不好,虽然不知道sql的字符串是不是像.net的一样具有不可变性,但感觉尽量不要去动原串最好,万一sql的字串也不可变,那变一次就要产生一份,尤其是每圈循环都在变,内存消耗让人心疼,所以才有重新造个轮子的想法。另外,如果SQL开启了CLR支持,完全可以封装一个.net的Split到SQL里用,这样最简单,性能也应该更好(猜测)。不废话,上函数:/*----------- 阅读全文
posted @ 2014-03-25 11:53 ahdung 阅读(5848) 评论(3) 推荐(0) 编辑

摘要:环境:mssql ent 2k8 r2原理:遍历所有含自增列的用户表,用sp_spaceused过程分别获取每张表的行数并写入临时表,然后使用IDENT_CURRENT函数获取表的最大标识值,比较二者并返回结果IF OBJECT_ID('tempdb..#TableRowCount','U') IS NOT NULL DROP TABLE #TableRowCountGOCREATE TABLE #TableRowCount (Name sysname PRIMARY KEY, RowCnt DECIMAL(11,0), Reserved VARCHAR(18) 阅读全文
posted @ 2014-01-28 17:01 ahdung 阅读(344) 评论(0) 推荐(0) 编辑

摘要:环境:mssql ent 2k8 r2原理:遍历所有用户表,用sp_spaceused过程分别获取每张表的行数并写入临时表,最后返回临时表IF OBJECT_ID('tempdb..#TableRowCount','U') IS NOT NULL DROP TABLE #TableRowCountGOCREATE TABLE #TableRowCount (Name sysname PRIMARY KEY, RowCnt DECIMAL(11,0), Reserved VARCHAR(18), Data VARCHAR(18), Index_Size VARCH 阅读全文
posted @ 2014-01-28 16:51 ahdung 阅读(2024) 评论(0) 推荐(0) 编辑

摘要:SQL中有LTRIM和RTRIM这两个函数分别用于去除字符串的首、尾空格,缺乏常见的能同时去除首尾的TRIM函数,另外,这俩函数都只对【空格】有效,所以如果首尾是制表符、换行符等等【空白】,它们是不处理的~起码到sql 2k8 r2仍然如此。鉴于此,我写了个靠谱的TRIM函数,上代码:/*---------------------函数:去除头尾空白v0.01Author:AhDungUpdate:201311301716Rem:由于LEN不统计尾随空格,所以做特别处理---------------------*/ALTER FUNCTION dbo.Trim(@s VARCHAR(7999)) 阅读全文
posted @ 2013-12-26 15:18 ahdung 阅读(1638) 评论(0) 推荐(0) 编辑

摘要:注:周节点是根据中国习惯,视周一为起,周日为末。 阅读全文
posted @ 2013-05-16 11:00 ahdung 阅读(814) 评论(0) 推荐(0) 编辑

1
点击右上角即可分享
微信分享提示