标签: t-sql

如何返回表的列名?

如何使用SQL Server 2008返回表的列名?即一个表包含这些列 - id,name,address,country,我想将这些作为数据返回.

sql t-sql sql-server

230
推荐指数
8
解决办法
50万
查看次数

检查是否存在行,否则插入

我需要编写一个T-SQL存储过程来更新表中的行.如果该行不存在,请插入它.所有这些步骤都由事务包装.

这是一个预订系统,所以它必须是原子和可靠的.如果交易已提交且预订航班,则必须返回true.

我是T-SQL的新手,不知道如何使用@@rowcount.这是我到现在为止所写的.我在正确的道路上吗?我确信这对你来说很容易.

-- BEGIN TRANSACTION (HOW TO DO?)

UPDATE Bookings
 SET TicketsBooked = TicketsBooked + @TicketsToBook
 WHERE FlightId = @Id AND TicketsMax < (TicketsBooked + @TicketsToBook)

-- Here I need to insert only if the row doesn't exists.
-- If the row exists but the condition TicketsMax is violated, I must not insert 
-- the row and return FALSE

IF @@ROWCOUNT = 0 
BEGIN

 INSERT INTO Bookings ... (omitted)

END

-- END TRANSACTION …
Run Code Online (Sandbox Code Playgroud)

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

226
推荐指数
5
解决办法
48万
查看次数

如果只在sql server中存在外键约束,我该怎么办?

我可以使用以下代码删除表,但不知道如何使用约束执行相同的操作:

IF EXISTS(SELECT 1 FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'TableName') AND type = (N'U')) DROP TABLE TableName
go 
Run Code Online (Sandbox Code Playgroud)

我还使用此代码添加约束:

ALTER TABLE [dbo].[TableName] 
  WITH CHECK ADD CONSTRAINT [FK_TableName_TableName2] FOREIGN KEY([FK_Name])
    REFERENCES [dbo].[TableName2] ([ID])
go
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2005

223
推荐指数
6
解决办法
25万
查看次数

如何在LIKE子句中转义方括号?

我正在尝试使用类似的过滤器使用存储过程过滤项目.该列是varchar(15).我想要过滤的项目在名称中有方括号.

例如: WC[R]S123456.

如果我这样做LIKE 'WC[R]S123456',它将不会返回任何东西.

我找到了一些关于使用ESCAPE关键字的信息,LIKE但我不明白如何使用它来将方括号视为常规字符串.

t-sql sql-server escaping character sql-like

222
推荐指数
7
解决办法
14万
查看次数

220
推荐指数
7
解决办法
56万
查看次数

何时使用公用表表达式(CTE)

我已经开始阅读有关Common Table Expression的内容,并且无法想到我需要使用它们的用例.它们似乎是多余的,因为派生表可以做到这一点.有什么我缺少或不理解?有人能给我一个简单的限制例子,通过常规的select,derived或temp表查询来说明CTE的情况吗?任何简单的例子都将受到高度赞赏.

sql t-sql sql-server common-table-expression

219
推荐指数
7
解决办法
33万
查看次数

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万
查看次数

为什么使用READ UNCOMMITTED隔离级别?

用简单的英语,使用的缺点和优点是什么

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
Run Code Online (Sandbox Code Playgroud)

在查询.NET应用程序和报告服务应用程序?

t-sql sql-server isolation-level

215
推荐指数
7
解决办法
27万
查看次数

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

我有一个像这样的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万
查看次数