SQL Server有哪些隐藏的功能?
例如,没有文档的系统存储过程,做一些非常有用但没有足够文档记录的技巧?
答案
感谢所有人的所有伟大答案!
Stored Procedures
-
sp_msforeachtable: 运行一个命令,其中'?'替换为每个表名(v6.5及更高版本)
-
sp_msforeachdb: 运行一个命令,其中'?'替换为每个数据库名称(v7及更高版本)
-
sp_who2: 就像sp_who一样,但有更多关于故障排除块的信息(v7及更高版本)
-
sp_helptext: 如果需要存储过程的代码,请查看&UDF
-
sp_tables: 返回范围内数据库的所有表和视图的列表 .
-
sp_stored_procedures: 返回所有存储过程的列表
-
xp_sscanf: 将字符串中的数据读入每个format参数指定的参数位置 .
-
xp_fixeddrives: :找到具有最大可用空间的固定驱动器
-
sp_help: 如果要了解表的表结构,索引和约束 . 还有视图和UDF . 快捷方式是Alt F1
Snippets
-
以随机顺序返回行
-
按上次修改日期的所有数据库用户对象
-
仅限退货日期
-
查找哪些日期属于本周内某处的记录 .
-
查找上周发生的日期记录 .
-
返回当前周开始的日期 .
-
返回上周开始的日期 .
-
请参阅已部署到服务器的过程的文本
-
删除与数据库的所有连接
-
表格校验和
-
Row Checksum
-
删除数据库中的所有过程
-
恢复后正确重新映射登录ID
-
从INSERT语句调用存储过程
-
按关键字查找程序
-
删除数据库中的所有过程
-
以编程方式查询数据库的事务日志 .
Functions
-
HashBytes()
-
EncryptByKey
-
PIVOT命令
Misc
-
连接字符串附加功能
-
TableDiff.exe
-
登录事件的触发器(Service Pack 2中的新增功能)
-
使用持久计算列(pcc)提升性能 .
sys.database_principles中的 -
DEFAULT_SCHEMA设置
-
强制参数化
-
Vardecimal存储格式
-
在几秒钟内找出最受欢迎的查询
-
可扩展的共享数据库
SQL Management Studio中的 -
表/存储过程过滤器功能
-
跟踪标志
-
GO
重复批次后的数字 -
使用模式的安全性
-
使用内置加密函数,视图和带触发器的基表进行加密
30 回答
The spatial results tab can be used to create art .
enter link description here http://michaeljswart.com/wp-content/uploads/2010/02/venus.png
TableDiff.exe
Link
有时候没有合适的列可以排序,或者您只想在表上使用默认排序顺序,并且想要枚举每一行 . 为了做到这一点,你可以在“order by”子句中加上“(select 1)”,你就可以得到你想要的东西 . 整洁,嗯?
在SQL Server 2005/2008中显示SELECT查询结果中的行号:
ORDER BY是一项强制性条款 . OVER()子句告诉SQL引擎对指定列(在本例中为OrderId)中的数据进行排序,并根据排序结果分配数字 .
如果您想要存储过程的代码,您可以:
(不确定它是否是隐藏功能,但我一直使用它)
以下是我觉得有用的一些功能,但很多人似乎并不了解:
Link
Link
EXCEPT and INTERSECT
在比较两个查询结果时,这两个关键字不是编写复杂的连接和子查询,而是更加优雅的简写和可读方式来表达查询的意图 . 从SQL Server 2005开始,它们强有力地补充了多年来已经存在于TSQL语言中的UNION .
EXCEPT,INTERSECT和UNION的概念是集合论的基础,它是所有现代RDBMS使用的关系建模的基础和基础 . 现在,使用TSQL可以更直观,更容易地生成维恩图类型结果 .
查找日期在当前周内某处的记录 .
查找上周发生的日期记录 .
返回当前周开始的日期 .
返回上周开始的日期 .
在为测试目的或其他任何方面恢复数据库时非常有用 . 重新映射登录ID正确:
我知道它并没有完全隐藏,但没有太多人知道PIVOT命令 . 我能够更改使用游标的存储过程,并花了2分钟时间遇到快速的6秒代码,这个代码只有行数的十分之一!
Row Constructors
您可以使用单个insert语句插入多行数据 .
许多SQL Server开发人员似乎仍然不了解DELETE,INSERT和UPDATE语句中的 OUTPUT clause (SQL Server 2005及更新版本) .
知道哪些行已被INSERTed,UPDATEd或DELETEd非常有用,并且OUTPUT子句允许非常容易地执行此操作 - 它允许访问名为
inserted
和deleted
的"virtual"表(如触发器中):如果要将值插入具有INT IDENTITY主键字段的表中,并使用OUTPUT子句,则可以立即获取插入的新ID:
如果你正在更新,知道改变了什么是非常有用的 - 在这种情况下,
inserted
表示新值(在UPDATE之后),而deleted
指的是UPDATE之前的旧值:如果返回大量信息,OUTPUT的输出也可以重定向到临时表或表变量(
OUTPUT INTO @myInfoTable
) .非常有用 - 而且知之甚少!
渣
sp_msforeachtable
:运行一个命令,其中'?'替换为每个表名 . 例如您可以为每个表发出最多3个命令
另外,
sp_MSforeachdb
dm_db_index_usage_stats
这使您可以知道表中的数据是否最近已更新,即使表中没有DateUpdated列也是如此 .
代码:http://blog.sqlauthority.com/2009/05/09/sql-server-find-last-date-time-updated-for-any-table/
引用的信息:SQL Server - What is the date/time of the last inserted row of a table?
在SQL 2005及更高版本中可用
用于解析存储过程参数:xp_sscanf
在Tools \ Options \ Keyboard下的Management Studio中设置密钥映射并不是一个隐藏的功能:Alt F1默认为sp_help“选定文本”但是如果没有为sp_helptext添加Ctrl F1“选择的文本”我就无法生存
Figuring out the most popular queries
Link与commnad
删除与数据库的所有连接:
我不确定这是否是一个隐藏的功能,但我偶然发现了这一点,并发现它在很多场合都很有用 . 您可以在单个select语句中对一组字段进行concatonate,而不是使用游标并循环遍历select语句 .
例:
结果:
连接字符串附加功能:
MultipleActiveResultSets=true;
这使得ADO.Net 2.0及更高版本在单个数据库连接上读取多个只进,只读的结果集,如果您正在进行大量读取,则可以提高性能 . 即使您正在混合使用各种查询类型,也可以将其打开 .
Application Name=MyProgramName
现在,当您想通过查询sysprocesses表查看活动连接列表时,程序的名称将显示在program_name列而不是“.Net SqlClient Data Provider”中
存储过程技巧是您可以从INSERT语句中调用它们 . 我在使用SQL Server数据库时发现这非常有用 .
在Management Studio中,您可以在GO批次结束标记之后放置一个数字,以使批次重复多次:
将'X'打印10次 . 这样做可以避免在做重复的事情时从繁琐的复制/粘贴中解脱出来 .
如果您想了解表结构,索引和约束:
表格校验和
行校验和
在Management Studio中,您可以通过以下方式快速获取表的列的逗号分隔列表:
在对象资源管理器中,展开给定表下的节点(这样您将看到列,键,约束,触发器等的文件夹)
指向Columns文件夹并拖入查询 .
当您不想使用通过右键单击表并选择Script Table As ...返回时发出的令人发指的格式时,这很方便,然后插入到...这个技巧可以与其他文件夹一起使用,因为它会给你以逗号分隔的文件夹中包含的名称列表 .
HashBytes()返回其输入的MD2,MD4,MD5,SHA或SHA1哈希值 .
使用EncryptByKey进行简单加密
一种鲜为人知的TSQL技术,用于以随机顺序返回行:
仅限退货日期
要么
Persisted-computed-columns
Link