我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) 我想知道在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)
这可能吗?
我试图检测服务器是否正在运行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) 我对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语句引发运行时错误,则终止并回滚整个事务.
这是否意味着我必须使用显式交易?
如果您想使用T-SQL生成伪随机字母数字字符串,您会怎么做?你会如何排除美元符号,破折号和斜线等字符?
考虑一个名为EmployeeNametable 的列Employee.目标是根据EmployeeName字段删除重复记录.
EmployeeName
------------
Anand
Anand
Anil
Dipak
Anil
Dipak
Dipak
Anil
Run Code Online (Sandbox Code Playgroud)
使用一个查询,我想删除重复的记录.
如何在SQL Server中使用TSQL?
在研究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) 我正在寻找如何使用RegEx替换/编码文本基于下面的RegEx设置/参数:
RegEx.IgnoreCase = True
RegEx.Global = True
RegEx.Pattern = "[^a-z\d\s.]+"
Run Code Online (Sandbox Code Playgroud)
我在RegEx上看到了一些例子,但对于如何在SQL Server中以相同的方式应用它感到困惑.任何的意见都将会有帮助.谢谢.
我以前写这样的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)
这真的有所作为吗?
我正在寻找T-SQL中的内置函数/扩展函数,用于字符串操作,类似于String.Format.NET中的方法.
t-sql ×10
sql ×7
sql-server ×6
concurrency ×1
delete-row ×1
duplicates ×1
dynamic-sql ×1
locking ×1
random ×1
regex ×1
string ×1