标签: sql-server

SQL Server的隐藏功能

SQL Server的一些隐藏功能是什么?

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


答案

感谢所有人的所有伟大答案!

存储过程

  • 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

片段

  • 以随机顺序返回行
  • 按上次修改日期的所有数据库用户对象
  • 仅限退货日期
  • 查找日期在当前周内某处的记录.
  • 查找上周发生的日期记录.
  • 返回当前周开始的日期.
  • 返回上周开始的日期.
  • 请参阅已部署到服务器的过程的文本
  • 删除与数据库的所有连接
  • 表格校验和
  • 行校验和
  • 删除数据库中的所有过程
  • 还原后正确重新映射登录ID
  • 从INSERT语句调用存储过程
  • 按关键字查找程序
  • 删除数据库中的所有过程
  • 以编程方式查询数据库的事务日志.

功能

  • HASHBYTES()
  • EncryptByKey的
  • PIVOT命令

杂项

  • 连接字符串附加功能
  • TableDiff.exe
  • 登录事件的触发器(Service Pack 2中的新增功能)
  • 使用持久计算列(pcc)提升性能.
  • sys.database_principles中的DEFAULT_SCHEMA设置
  • 强制参数化
  • Vardecimal存储格式
  • 在几秒钟内找出最受欢迎的查询
  • 可扩展的共享数据库
  • SQL Management Studio中的表/存储过程过滤器功能
  • 跟踪标志
  • GO重复批次后的数字
  • 使用模式的安全性
  • 使用内置加密函数,视图和带触发器的基表进行加密

t-sql sql-server

215
推荐指数
35
解决办法
6万
查看次数

将逗号分隔的字符串转换为单独的行

我有一个像这样的SQL表:

| SomeID         | OtherID     | Data
+----------------+-------------+-------------------
| abcdef-.....   | cdef123-... | 18,20,22
| abcdef-.....   | 4554a24-... | 17,19
| 987654-.....   | 12324a2-... | 13,19,20
Run Code Online (Sandbox Code Playgroud)

是否有一个查询,我可以执行查询,如SELECT OtherID, SplitData WHERE SomeID = 'abcdef-.......'返回单个行,如下所示:

| OtherID     | SplitData
+-------------+-------------------
| cdef123-... | 18
| cdef123-... | 20
| cdef123-... | 22
| 4554a24-... | 17
| 4554a24-... | 19
Run Code Online (Sandbox Code Playgroud)

基本上将逗号中的数据拆分成单独的行?

我知道将comma-separated字符串存储到关系数据库听起来很愚蠢,但消费者应用程序中的正常用例使得这非常有用.

我不想在应用程序中进行拆分,因为我需要分页,因此我想在重构整个应用程序之前探索选项.

这是SQL Server 2008(非R2).

t-sql sql-server split comma

215
推荐指数
10
解决办法
41万
查看次数

用于终止与数据库的所有连接的脚本(超过RESTRICTED_USER ROLLBACK)

我有一个开发数据库,​​经常从Visual Studio数据库项目(通过TFS自动构建)重新部署.

有时当我运行我的构建时,我收到此错误:

ALTER DATABASE failed because a lock could not be placed on database 'MyDB'. Try again later.  
ALTER DATABASE statement failed.  
Cannot drop database "MyDB" because it is currently in use.  
Run Code Online (Sandbox Code Playgroud)

我试过这个:

ALTER DATABASE MyDB SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE
Run Code Online (Sandbox Code Playgroud)

但我仍然无法删除数据库.(我的猜测是大多数开发人员都dbo可以访问.)

我可以手动运行SP_WHO并开始查杀连接,但我需要一种自动方式在自动构建中执行此操作.(虽然这次我的连接是我试图丢弃的数据库中唯一的连接.)

是否有一个脚本可以删除我的数据库,无论谁连接?

sql t-sql sql-server sql-server-2008 sql-server-2008-r2

214
推荐指数
4
解决办法
48万
查看次数

如何在TSQL中刷新PRINT缓冲区?

我在SQL Server 2005中有一个非常长时间运行的存储过程,我正在尝试调试,而我正在使用'print'命令来执行此操作.问题是,我只是在我的sproc的最后从SQL Server获取消息 - 我希望能够刷新消息缓冲区并在sproc的运行时立即看到这些消息,而不是在结束.

t-sql sql-server printing

213
推荐指数
5
解决办法
9万
查看次数


MSSQL错误'基础提供程序在Open上失败'

我正在使用一个.mdf连接到databaseentityClient.现在我想更改连接字符串,以便没有.mdf文件.

以下connectionString是否正确?

<connectionStrings>
   <!--<add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQL2008;AttachDbFilename=|DataDirectory|\NData.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />-->
   <add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQL2008;Initial Catalog=NData;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)

因为我总是得到错误:

底层提供程序在Open上失败

c# sql-server entity-framework database-connection

213
推荐指数
8
解决办法
55万
查看次数

INSERT语句与FOREIGN KEY约束 - SQL Server冲突

我收到以下错误.请你帮助我好吗?

消息547,级别16,状态0,行1
INSERT语句与FOREIGN KEY约束"FK_Sup_Item_Sup_Item_Cat"冲突.冲突发生在数据库"dev_bo",表"dbo.Sup_Item_Cat"中.该语句已终止.

码:

insert into sup_item (supplier_id, sup_item_id, name, sup_item_cat_id, 
                      status_code, last_modified_user_id, last_modified_timestamp, client_id)   
values (10162425, 10, 'jaiso', '123123',
        'a', '12', '2010-12-12', '1062425')
Run Code Online (Sandbox Code Playgroud)

最后一列client_id导致错误.我试图将已存在的值dbo.Sup_Item_Cat放入列中,对应于sup_item ..但没有欢乐:-(

sql sql-server sql-server-2005 foreign-keys

213
推荐指数
8
解决办法
53万
查看次数

SQL Server Management Studio,如何将执行时间缩短到毫秒

当我在SSMS中提交批处理(例如,执行查询)时,我看到在状态栏中执行所花费的时间.是否可以配置SSMS以毫秒级分辨率显示查询时间?

这是我正在谈论的用红色圈出的感兴趣部分的酒吧:

在此输入图像描述

sql-server ssms sql-server-2008

213
推荐指数
6
解决办法
13万
查看次数

在SQL Server 2008中正确使用事务

我有2个命令,需要它们都正确执行或者没有执行.所以我认为我需要一个交易,但我不知道如何正确使用它.

以下脚本有什么问题?

BEGIN TRANSACTION [Tran1]

INSERT INTO [Test].[dbo].[T1]
    ([Title], [AVG])
VALUES ('Tidd130', 130), ('Tidd230', 230)

UPDATE [Test].[dbo].[T1]
  SET [Title] = N'az2' ,[AVG] = 1
  WHERE [dbo].[T1].[Title] = N'az'

COMMIT TRANSACTION [Tran1]
GO
Run Code Online (Sandbox Code Playgroud)

INSERT命令已执行但UPDATE命令有问题.如果其中任何一个命令执行错误,我如何实现它来回滚这两个命令?

sql t-sql database sql-server transactions

213
推荐指数
3
解决办法
24万
查看次数

在SQL Server中计算中值的函数

根据MSDN,Median不能作为Transact-SQL中的聚合函数使用.但是,我想知道是否可以创建此功能(使用Create Aggregate函数,用户定义函数或其他方法).

这样做的最佳方式(如果可能) - 允许在聚合查询中计算中值(假设数值数据类型)?

sql sql-server aggregate-functions median

212
推荐指数
6
解决办法
40万
查看次数