Tag: tsql

我怎样才能确定工作的状态?

我有一个存储过程,安排一个工作。 这项工作需要很长时间才能完成(大约30到40分钟)。 我需要了解这份工作的状况。 以下细节将帮助我 1)如何查看未来计划的所有工作清单,但尚未开始 2)如何查看正在运行的作业列表以及运行时间 3)如何查看工作是否已经成功完成或由于任何错误而停滞。

我何时不应该使用分号?

或者: 什么不是T-SQL语句? 除了解决歧义外,T-SQL语法不需要用分号来终止语句。 尽pipe如此, Itzik Ben-Ganbuild议使用分号来终止T-SQL语句,因为它使代码变得更清晰,更具可读性,更易于维护和更便于携带。 我不知道什么是有效的T-SQL语句的确切定义,所以我可能会在这里感到困惑。 但据我所知,一个BEGIN … END块是一个T-SQL语句,所以应该以分号结尾。 例如: IF OBJECT_ID('tempdb.dbo.#TempTable') IS NOT NULL BEGIN DROP TABLE #TempTable; END; 微软的BEGIN … END文档中的代码示例支持这个猜想: USE AdventureWorks2008R2; GO BEGIN TRANSACTION; GO IF @@TRANCOUNT = 0 BEGIN SELECT FirstName, MiddleName FROM Person.Person WHERE LastName = 'Adams'; ROLLBACK TRANSACTION; PRINT N'Rolling back the transaction two times would cause […]

将NTEXT列与常数值进行比较的正确方法是什么?

如果我使用类似的东西 [ntext2] <> '1,032.5', 我得到这个错误: 数据typesntext和varchar在不等于运算符时不兼容。 最好的解决scheme是如果对任何列types以相同的方式进行比较。 (<>运算符适用于NVARCHAR和INT)。

计算SQL Server存储过程中删除的行数

在SQL Server 2005中,是否有删除行的方法,并被告知有多less人被删除? 我可以用相同的条件做一个select count(*) ,但是我需要这个值得信赖。 我的第一个猜测是使用@@ROWCOUNTvariables – 但没有设置,例如 delete from mytable where datefield = '5-Oct-2008' select @@ROWCOUNT 总是返回一个0。 MSDNbuild议OUTPUT结构,例如 delete from mytable where datefield = '5-Oct-2008' output datefield into #doomed select count(*) from #doomed 这实际上是一个语法错误失败。 有任何想法吗?

公用expression式,为什么是分号?

通常在SQL Server公共expression式子句中,语句前面有分号,如下所示: ;WITH OrderedOrders AS –semicolon here ( SELECT SalesOrderID, OrderDate, ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber' FROM Sales.SalesOrderHeader ) SELECT * FROM OrderedOrders WHERE RowNumber BETWEEN 50 AND 60 为什么?

比较SQL中的两个位掩码,看是否有任何位匹配

有没有办法在Transact-SQL中比较两个位掩码来查看是否有位匹配? 我有一个用户所有angular色的位掩码的用户表,我想select提供的位掩码中的任何angular色的所有用户。 因此,使用下面的数据,angular色位掩码6(devise师+程序员)应该select戴夫,查理和苏珊,但不是尼克。 用户表 ———- ID用户名angular色 1戴夫6 2查理2 3苏珊4 4尼克1 angular色表 ———– IDangular色 1pipe理员 2程序员 4devise师 有任何想法吗? 谢谢。

使用基于Count的IF ELSE语句来执行不同的Insert语句

当我通过数据库进行search时,如果发现某个特定的项目不存在,则运行INSERT语句,如果find一个或多个此项目,则运行另一个INSERT语句。 我不完全确定如何使用IF ELSEexpression式。 我到目前为止是一个声明,将计数目标数据出现的次数; 如果大于0,它将打印为TRUE,否则打印为FALSE。 我找不到任何示例来帮助我理解如何使用它来运行两个不同的INSERT语句。 这是我到目前为止: SELECT CASE WHEN COUNT(*)>0 THEN 'TRUE' ELSE 'FALSE' END ( SELECT [Some Column], COUNT(*) TotalCount FROM INCIDENTS WHERE [Some Column] = 'Target Data' GROUP BY [Some Column] )

SQL Server相当于Oracle的NULLS FIRST?

因此,Oracle有NULLS FIRST,我可以使用空值在顶部sorting,然后按降序排列我的列值: ORDER BY date_sent NULLS FIRST 在SQL Server中有什么可比的? 假设date值为NULL或过去有以下替代scheme: ORDER BY ISNULL(date_sent, GETDATE()) DESC ORDER BY (CASE WHEN t.setinactive IS NULL THEN 1 ELSE 2 END), t.setinactive DESC ORDER BY -CAST(date_sent as int) ASC 其他人?

如果存在,则select其他插入,然后select

你如何在Microsoft SQL Server 2005中说下面的内容: IF EXISTS (SELECT * FROM Table WHERE FieldValue='') THEN SELECT TableID FROM Table WHERE FieldValue='' ELSE INSERT INTO TABLE(FieldValue) VALUES('') SELECT TableID FROM Table WHERE TableID=SCOPE_IDENTITY() END IF 我想要做的是看看是否有一个空白fieldvalue,如果有,然后返回该TableID,否则插入一个空白的fieldvalue并返回相应的主键。

如何检查sp_dbcmptlevel之后的SQL Server数据库兼容性?

根据sp_dbcmptlevel上的BOL(SQL Server联机丛书) 此function将在未来版本的Microsoft SQL Server中删除。 不要在新的开发工作中使用这个特性,并尽快修改当前使用这个特性的应用。 改为使用ALTER DATABASE兼容级别。 现在,我知道检查数据库兼容性的唯一TSQL方法是通过sp_dbcmptlevel 。 据我所知, ALTER DATABASE Compatibility Level只是设置兼容级别,而不是获取信息。 如何在不使用GUI的情况下获得兼容级别?