标签: t-sql

Where子句中的SQL Row_Number()函数

Row_Number()在where子句中找到了一个用函数回答的问题.当我尝试一个查询时,我收到以下错误:

"消息4108,级别15,状态1,行1窗口函数只能出现在SELECT或ORDER BY子句中."

这是我试过的查询.如果有人知道如何解决这个问题,请告诉我.

SELECT employee_id 
FROM V_EMPLOYEE 
WHERE row_number() OVER ( ORDER BY employee_id ) > 0 
ORDER BY Employee_ID
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server analytic-functions

86
推荐指数
7
解决办法
21万
查看次数

为查询字符串声明变量

我想知道在MS SQL Server 2005中是否有办法做到这一点:

  DECLARE @theDate varchar(60)
  SET @theDate = '''2010-01-01'' AND ''2010-08-31 23:59:59'''

  SELECT    AdministratorCode, 
            SUM(Total) as theTotal, 
            SUM(WOD.Quantity) as theQty, 
            AVG(Total) as avgTotal, 
            (SELECT SUM(tblWOD.Amount)
                FROM tblWOD
                JOIN tblWO on tblWOD.OrderID = tblWO.ID
                WHERE tblWO.Approved = '1' 
                AND tblWO.AdministratorCode = tblWO.AdministratorCode
                AND tblWO.OrderDate BETWEEN @theDate
            )
 ... etc
Run Code Online (Sandbox Code Playgroud)

这可能吗?

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

86
推荐指数
3
解决办法
58万
查看次数

是否有带变量的ssql中的StartsWith或Contains?

我试图检测服务器是否正在运行Express Edition.

我有以下t sql.

DECLARE @edition varchar(50); 
set @edition = cast((select SERVERPROPERTY ('edition')) as varchar)

print @edition
Run Code Online (Sandbox Code Playgroud)

在我的例子中, @edition = Express Edition (64-bit)

我该怎么办?(C#启发).

DECLARE @isExpress bit;
set @isExpress = @edition.StartsWith('Express Edition');
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server-2008

86
推荐指数
4
解决办法
11万
查看次数

当xact_abort打开时,为什么Sql Server在raiserror之后继续执行?

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

raiserror('Something bad happened', 16, 1);
Run Code Online (Sandbox Code Playgroud)

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

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

这是我的解决方法(无论如何这是我的习惯),但它似乎不应该是必要的:

if @somethingBadHappened
    begin;
        raiserror('Something bad happened', 16, 1);
        return;
    end;
Run Code Online (Sandbox Code Playgroud)

文档说这个:

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

这是否意味着我必须使用显式交易?

sql t-sql sql-server

85
推荐指数
4
解决办法
5万
查看次数

使用T-SQL生成随机字符串

如果您想使用T-SQL生成伪随机字母数字字符串,您会怎么做?你会如何排除美元符号,破折号和斜线等字符?

sql t-sql random

85
推荐指数
12
解决办法
16万
查看次数

删除SQL Server中的重复记录?

考虑一个名为EmployeeNametable 的列Employee.目标是根据EmployeeName字段删除重复记录.

EmployeeName
------------
Anand
Anand
Anil
Dipak
Anil
Dipak
Dipak
Anil
Run Code Online (Sandbox Code Playgroud)

使用一个查询,我想删除重复的记录.

如何在SQL Server中使用TSQL?

sql t-sql duplicates delete-row

85
推荐指数
3
解决办法
8万
查看次数

对UPDLOCK,HOLDLOCK感到困惑

在研究Table Hints的使用时,我遇到了这两个问题:

这两个问题的答案都说,在使用时(UPDLOCK, HOLDLOCK),其他进程将无法读取该表上的数据,但我没有看到这一点.为了测试,我创建了一个表并启动了两个SSMS窗口.从第一个窗口,我运行了一个使用各种表提示从表中选择的事务.当事务正在运行时,我从第二个窗口运行了各种语句,看看哪些会被阻止.

测试表:

CREATE TABLE [dbo].[Test](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Value] [nvarchar](50) NULL,
 CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

从SSMS窗口1:

BEGIN TRANSACTION

SELECT * FROM dbo.Test WITH (UPDLOCK, HOLDLOCK)
WAITFOR DELAY '00:00:10'

COMMIT TRANSACTION
Run Code Online (Sandbox Code Playgroud)

从SSMS窗口2(运行以下之一):

SELECT * FROM dbo.Test
INSERT dbo.Test(Value) VALUES ('bar')
UPDATE dbo.Test SET Value = …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server concurrency locking sql-server-2008

85
推荐指数
2
解决办法
10万
查看次数

在SQL Server中使用RegEx

我正在寻找如何使用RegEx替换/编码文本基于下面的RegEx设置/参数:

RegEx.IgnoreCase = True     
RegEx.Global = True     
RegEx.Pattern = "[^a-z\d\s.]+"   
Run Code Online (Sandbox Code Playgroud)

我在RegEx上看到了一些例子,但对于如何在SQL Server中以相同的方式应用它感到困惑.任何的意见都将会有帮助.谢谢.

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

85
推荐指数
5
解决办法
38万
查看次数

使用存在1或存在的子查询*

我以前写这样的EXISTS检查:

IF EXISTS (SELECT * FROM TABLE WHERE Columns=@Filters)
BEGIN
   UPDATE TABLE SET ColumnsX=ValuesX WHERE Where Columns=@Filters
END
Run Code Online (Sandbox Code Playgroud)

前一个DBA中的一个告诉我,当我做一个EXISTS条款时,请使用SELECT 1而不是SELECT *

IF EXISTS (SELECT 1 FROM TABLE WHERE Columns=@Filters)
BEGIN
   UPDATE TABLE SET ColumnsX=ValuesX WHERE Columns=@Filters
END
Run Code Online (Sandbox Code Playgroud)

这真的有所作为吗?

sql t-sql sql-server

84
推荐指数
4
解决办法
2万
查看次数

String.Format类似于T-SQL中的功能?

我正在寻找T-SQL中的内置函数/扩展函数,用于字符串操作,类似于String.Format.NET中的方法.

t-sql string

83
推荐指数
4
解决办法
10万
查看次数