问题标签 [tsql]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
58129 浏览

sql - 为什么当 xact_abort 开启时 Sql Server 在 raiserror 之后继续执行?

我只是对 TSQL 中的某些东西感到惊讶。我认为如果 xact_abort 开启,调用类似

将停止执行存储过程(或任何批处理)。

但我的 ADO.NET 错误消息正好相反。我在异常消息中收到了 raiserror 错误消息,以及在那之后发生的下一个问题。

这是我的解决方法(无论如何这是我的习惯),但似乎没有必要:

文档是这样说的:

当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句引发运行时错误,则整个事务将终止并回滚。

这是否意味着我必须使用显式事务?

0 投票
9 回答
2590 浏览

sql-server - 从另一个存储过程计算存储过程结果的最有效方法是什么?

在存储过程中,我需要获取另一个存储过程的结果计数。具体来说,我需要知道它是否返回任何结果或一个空集。

我可以创建一个临时表/表变量,将存储过程执行到其中,然后对该数据运行选择计数。但我真的不关心数据本身,我需要的只是计数(或数据的存在/不存在)。我想知道是否有更有效的方法来获取这些信息。

我不想只复制其他存储过程的内容并将其重写为选择计数。存储过程更改太频繁以至于无法使用。

0 投票
5 回答
3568 浏览

database - 在日期时间字段上仅存储日期的最佳方式?

场景:一个存储过程从代码中接收一个 DateTime,假设是 DateTime.Now 值,作为 datetime 参数。存储过程只需要在行上存储日期时间的日期部分,但保留所有与日期相关的算术,例如,在时间间隔内进行搜索并根据日期进行报告。

我知道有几种方法,但是考虑到性能和浪费空间有什么更好的方法?

0 投票
1 回答
58086 浏览

sql-server - 避免 SQL Server 上急切假脱机操作的方法

我有一个 ETL 过程,其中涉及一个存储过程,该过程大量使用SELECT INTO语句(最少记录,因此速度更快,因为它们生成的日志流量更少)。在一个特定存储的存储过程中发生的一批工作中,几个最昂贵的操作是急切的假脱机,它们似乎只是缓冲查询结果,然后将它们复制到刚刚制作的表中。

关于Eager spools的 MSDN 文档非常少。有没有人对这些是否真的有必要(以及在什么情况下)有更深入的了解?我有一些理论可能有意义,也可能没有意义,但没有成功从查询中消除这些理论。

.sqlplan 文件非常大(160kb),所以我想将它们直接发布到论坛可能不合理。

因此,这里有一些可能适用于特定答案的理论:

  • 该查询使用一些 UDF 进行数据转换,例如解析格式化的日期。这种数据转换是否需要在构建表之前使用急切的假脱机来为表分配合理的类型(例如 varchar 长度)?
  • 作为上述问题的扩展,是否有人对查询中驱动此操作或不驱动此操作的内容有更深入的了解?
0 投票
8 回答
14342 浏览

sql - Transact-SQL 总结经过的时间

我的数据库中有一个表,记录了特定任务的开始和停止时间。以下是数据示例:

我想编写一个脚本来汇总这些时间范围内经过的分钟数,并且只要有 12/31/9999 日期,我希望它使用当前日期和时间,因为这仍在进行中。

我将如何使用 Transact-SQL 执行此操作?

0 投票
6 回答
7020 浏览

sql-server - 如何更改 SQL Server 中数据库表上的 TEXT 列?

在 SQL 服务器数据库中,我有一个表,其中包含一个设置为允许 NULL 的 TEXT 字段。我需要将其更改为不允许 NULL。我可以通过企业管理器做到这一点,但是当我尝试运行以下脚本时,alter table dbo.[EventLog] Alter column [Message] text Not null,我得到一个错误:

无法更改列“ErrorMessage”,因为它是“文本”。

阅读 SQL 联机丛书确实表明您不允许在 TEXT 字段上执行 ALTER COLUMN。不过,我确实需要能够通过脚本来执行此操作,而不是在企业管理器中手动执行。那么在脚本中执行此操作的选项是什么?

0 投票
36 回答
64159 浏览

sql - SQL 选择即将到来的生日

我正在尝试编写一个存储过程来选择即将过生日的员工。

SELECT * FROM Employees WHERE Birthday > @Today AND Birthday < @Today + @NumDays

这将不起作用,因为出生年份是生日的一部分,所以如果我的生日是 '09-18-1983',则不会介于 '09-18-2008' 和 '09-25-2008' 之间。

有没有办法忽略日期字段的年份部分而只比较月/日?

这将在每个星期一早上运行,以提醒经理即将到来的生日,因此它可能会跨越新的一年。

这是我最终创建的工作解决方案,感谢 Kogus。

0 投票
7 回答
558 浏览

sql-server - 您如何维护大型 t-sql 程序

我即将继承一组庞大而复杂的存储过程,它们每月对非常大的数据集进行处理。

我们正在调试它们,以便它们与用 VB6 编写的原始过程相匹配。他们决定在 t-sql 中重新编写它们的原因是因为 vb 过程需要几天时间,而这个新过程需要几个小时。

这一切都很好,但我怎样才能使这些现在大量的 t-sql 代码(1.5k+ 行)甚至远程可读/可维护。

非常欢迎任何使 t-sql 不那么头痛的经验。

0 投票
9 回答
74084 浏览

sql-server - 在 SQL Server 中设置日期

在 SQL Server 中,如何将 DATETIME 设置为秒/分钟/小时/天/年?

假设我有一个日期2008-09-17 12:56:53.430,那么 floor 的输出应该是:

  • 年份:2008-01-01 00:00:00.000
  • 月份:2008-09-01 00:00:00.000
  • 日期:2008-09-17 00:00:00.000
  • 时间:2008-09-17 12:00:00.000
  • 分钟:2008-09-17 12:56:00.000
  • 第二:2008-09-17 12:56:53.000
0 投票
13 回答
136415 浏览

sql-server - 如何以编程方式确定哪些 SQL 表具有标识列

我想在 SQL Server 2005 中创建一个列列表,这些列在 T-SQL 中具有标识列及其对应的表。

结果将类似于:

表名、列名