SQL Server有哪些隐藏特性?

例如,没有文档的系统存储过程,做一些非常有用但没有足够文档的事情的技巧?


答案

感谢大家的精彩回答!

存储过程

sp_msforeachtable: Runs a command with '?' replaced with each table name (v6.5 and up) sp_msforeachdb: Runs a command with '?' replaced with each database name (v7 and up) sp_who2: just like sp_who, but with a lot more info for troubleshooting blocks (v7 and up) sp_helptext: If you want the code of a stored procedure, view & UDF sp_tables: return a list of all tables and views of database in scope. sp_stored_procedures: return a list of all stored procedures xp_sscanf: Reads data from the string into the argument locations specified by each format argument. xp_fixeddrives:: Find the fixed drive with largest free space sp_help: If you want to know the table structure, indexes and constraints of a table. Also views and UDFs. Shortcut is Alt+F1

片段

Returning rows in random order All database User Objects by Last Modified Date Return Date Only Find records which date falls somewhere inside the current week. Find records which date occurred last week. Returns the date for the beginning of the current week. Returns the date for the beginning of last week. See the text of a procedure that has been deployed to a server Drop all connections to the database Table Checksum Row Checksum Drop all the procedures in a database Re-map the login Ids correctly after restore Call Stored Procedures from an INSERT statement Find Procedures By Keyword Drop all the procedures in a database Query the transaction log for a database programmatically.

功能

哈希字节() EncryptByKey 枢轴命令

Misc

Connection String extras TableDiff.exe Triggers for Logon Events (New in Service Pack 2) Boosting performance with persisted-computed-columns (pcc). DEFAULT_SCHEMA setting in sys.database_principles Forced Parameterization Vardecimal Storage Format Figuring out the most popular queries in seconds Scalable Shared Databases Table/Stored Procedure Filter feature in SQL Management Studio Trace flags Number after a GO repeats the batch Security using schemas Encryption using built in encryption functions, views and base tables with triggers


当前回答

许多SQL Server开发人员似乎仍然不知道DELETE、INSERT和UPDATE语句中的OUTPUT子句(SQL Server 2005及更新版本)。

知道哪些行被插入、更新或删除是非常有用的,OUTPUT子句可以很容易地做到这一点——它允许访问称为插入和删除的“虚拟”表(就像在触发器中一样):

DELETE FROM (table)
OUTPUT deleted.ID, deleted.Description
WHERE (condition)

如果你在一个有INT IDENTITY主键字段的表中插入值,使用OUTPUT子句,你可以立即获得插入的新ID:

INSERT INTO MyTable(Field1, Field2)
OUTPUT inserted.ID
VALUES (Value1, Value2)

如果你正在更新,知道发生了什么变化是非常有用的——在这种情况下,插入表示更新之后的新值,而删除则指更新之前的旧值:

UPDATE (table)
SET field1 = value1, field2 = value2
OUTPUT inserted.ID, deleted.field1, inserted.field1
WHERE (condition)

如果将返回大量信息,output的输出也可以重定向到临时表或表变量(output INTO @myInfoTable)。

非常有用——却鲜为人知!

Marc

其他回答

表/存储过程过滤器是一个半隐藏的特性,非常有用…

在“SQL Server Management Studio对象资源管理器”中,右键单击“表或存储过程”文件夹,选择“筛选器”菜单,然后选择“筛选器设置”,并在“名称包含”行中输入部分名称。

同样地,使用Remove Filter再次查看所有表/存储过程。

sp_msforeachtable:运行带有'?替换为每个表名。 如。

exec sp_msforeachtable "dbcc dbreindex('?')"

您最多可以为每个表发出3个命令

exec sp_msforeachtable
    @Command1 = 'print ''reindexing table ?''',
    @Command2 = 'dbcc dbreindex(''?'')',
    @Command3 = 'select count (*) [?] from ?'

此外,sp_MSforeachdb

这不是一个隐藏的功能,而是在管理工作室的工具\选项\键盘下设置键映射: Alt+F1默认为sp_help“选定的文本”,但我不能没有添加Ctrl+F1为sp_helptext“选定的文本”

您可以用子查询创建一个逗号分隔的列表,并且后面没有最后一个逗号。据说这比之前使用的函数更有效。我想是2005年之后。

SELECT 
    Project.ProjectName,
    (SELECT
        SUBSTRING(
            (SELECT ', ' + Site.SiteName
            FROM Site
            WHERE Site.ProjectKey = Project.ProjectKey
            ORDER BY Project.ProjectName
    FOR XML PATH('')),2,200000)) AS CSV 
FROM Project

您还可以使用带有嵌套查询的FOR XML PATH来选择XML,我发现这很有用。

TableDiff.exe

表差异工具允许您发现和协调源表和目标表或视图之间的差异。Tablediff实用程序可以报告模式和数据的差异。tablediff最受欢迎的特性是它可以生成一个脚本,您可以在目标上运行该脚本,以协调表之间的差异。

Link