Questions tagged «tsql»

T-SQL(事务结构查询语言)是Sybase ASE和Microsoft SQL Server支持的SQL功能的扩展。请勿将此标签用于MySQL,PostgreSql,Oracle(Pl / SQL)相关查询。请注意,使用LINQ编写的SQL代码也不属于该标签的一部分。该标记是专门为使用Microsoft SQL Server进行高级SQL编程而创建的。


11
检查是否存在行,否则插入
我需要编写一个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, …

3
在SQL Server中正确使用事务
我有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 该INSERT指令被执行,但该UPDATE命令有一个问题。 如果它们中的任何一个执行有错误,我该如何实现以回滚这两个命令?

10
如何在LIKE子句中转义方括号?
我正在尝试使用存储过程来过滤项目。该列是varchar(15)。我要过滤的项目名称中带有方括号。 例如: WC[R]S123456。 如果我这样做LIKE 'WC[R]S123456',将不会返回任何内容。 我发现了有关将ESCAPE关键字用于with的一些信息,LIKE但是我不明白如何使用它将方括号视为常规字符串。

10
仅当sql服务器中存在外键约束时,如何删除它?
我可以使用以下代码删除表(如果存在),但不知道如何在约束条件下进行操作: IF EXISTS(SELECT 1 FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'TableName') AND type = (N'U')) DROP TABLE TableName go 我还使用以下代码添加了约束: ALTER TABLE [dbo].[TableName] WITH CHECK ADD CONSTRAINT [FK_TableName_TableName2] FOREIGN KEY([FK_Name]) REFERENCES [dbo].[TableName2] ([ID]) go

14
将逗号分隔的字符串变成单独的行
我有一个像这样的SQL表: | SomeID | OtherID | Data +----------------+-------------+------------------- | abcdef-..... | cdef123-... | 18,20,22 | abcdef-..... | 4554a24-... | 17,19 | 987654-..... | 12324a2-... | 13,19,20 是否有一个查询,我可以在其中执行这样的查询SELECT OtherID, SplitData WHERE SomeID = 'abcdef-.......',该查询返回单个行,如下所示: | OtherID | SplitData +-------------+------------------- | cdef123-... | 18 | cdef123-... | 20 | cdef123-... | 22 …
234 sql-server  tsql  split  comma 

9
何时使用通用表表达式(CTE)
我已经开始阅读有关公用表表达式的内容,无法想到需要使用它们的用例。它们似乎是多余的,因为可以对派生表执行相同的操作。我有什么想念的东西吗?有人可以通过常规选择查询,派生查询或临时表查询来举例说明CTE的局限性吗?任何简单的例子将不胜感激。

14
T-SQL CASE子句:如何指定WHEN NULL
我写了一个类似这样的T-SQL语句(原始语句看起来不一样,但是我想在这里举一个简单的例子): SELECT first_name + CASE last_name WHEN null THEN 'Max' ELSE 'Peter' END AS Name FROM dbo.person 该语句没有任何语法错误,但大小写始终选择ELSE部分-如果last_name为null。但为什么? 我想做的是将first_name和last_name结合在一起,但是如果last_name为null,则整个名称将变为null: SELECT first_name + CASE last_name WHEN null THEN '' ELSE ' ' + last_name END AS Name FROM dbo.person 您知道问题出在哪里吗?
227 tsql 


4
CTE,子查询,临时表或表变量之间是否存在性能差异?
在这个出色的SO问题中,讨论了CTE和之间的sub-queries差异。 我想特别问一下: 在以下哪种情况下,以下各项中的每一种都更有效/更快? CTE 子查询 临时表 表变量 传统上,我使用了大量的temp tables开发工具stored procedures-因为它们似乎比许多相互交织的子查询更具可读性。 Non-recursive CTE可以很好地封装数据集,并且可读性很强,但是在特定情况下有人可以说它们将始终表现更好吗?还是总是必须摆弄各种选项以找到最有效的解决方案? 编辑 最近有人告诉我,就效率而言,临时表是一个不错的首选,因为它们具有关联的直方图,即统计信息。



5
如何在TSQL中刷新PRINT缓冲区?
我在SQL Server 2005中有一个非常长时间运行的存储过程,正在尝试调试,并且正在使用“ print”命令来进行调试。问题是,我只能在存储过程的最后从SQL Server取回消息-我希望能够刷新消息缓冲区并在存储过程的运行时立即查看这些消息,而不是在运行时结束。

30
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:将数据从字符串读取到每个格式参数指定的参数位置。 xp_fixeddrives::查找具有最大可用空间的固定驱动器 sp_help:如果要了解表的结构,表的索引和约束。以及视图和UDF。快捷键是Alt + F1 片段 以随机顺序返回行 上次修改日期的所有数据库用户对象 仅返回日期 查找哪个日期属于当前星期内的记录。 查找上周发生日期的记录。 返回当前星期开始的日期。 返回上周开始的日期。 查看已部署到服务器的过程的文本 删除所有与数据库的连接 表校验和 行校验和 将所有过程拖放到数据库中 还原后正确重新映射登录ID 从INSERT语句调用存储过程 按关键字查找程序 将所有过程拖放到数据库中 以编程方式查询事务日志中的数据库。 功能 HashBytes() 加密密钥 PIVOT命令 杂项 连接字符串附加 TableDiff.exe 登录事件的触发器(Service Pack 2中的新增功能) 通过持久计算列(pcc)提高性能。 sys.database_principles中的DEFAULT_SCHEMA设置 …
215 sql-server  tsql 

25
从数据库表生成类
如何从SQL Server表对象生成类? 我不是在谈论使用一些ORM。我只需要创建实体(简单类)。就像是: public class Person { public string Name { get;set; } public string Phone { get;set; } } 给定一些表,如: +----+-------+----------------+ | ID | Name | Phone | +----+-------+----------------+ | 1 | Alice | (555) 555-5550 | | 2 | Bob | (555) 555-5551 | | 3 | Cathy …
214 c#  sql  sql-server  tsql 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.