一切都基于这样的假设,即(nolock)完全适合于这种情况.已经有很多问题争论是否与(nolock)一起使用.
我环顾四周,无法找到使用之间是否存在实际差异with(nolock)
:
select customer, zipcode from customers c with(nolock)
Run Code Online (Sandbox Code Playgroud)
或者只是(nolock)
:
select customer, zipcode from customers c (nolock)
Run Code Online (Sandbox Code Playgroud)
这两者之间是否存在功能差异?文体?
一个比另一个年长,有可能被弃用吗?
假设我有以下T-SQL代码:
SELECT * FROM Foo f
INNER JOIN Bar b ON b.BarId = f.BarId;
WHERE b.IsApproved = 1;
Run Code Online (Sandbox Code Playgroud)
以下一行也返回相同的行集:
SELECT * FROM Foo f
INNER JOIN Bar b ON (b.IsApproved = 1) AND (b.BarId = f.BarId);
Run Code Online (Sandbox Code Playgroud)
这可能不是这里最好的案例样本,但这两者之间是否有任何性能差异?
如果查询没有返回任何行,是否有任何简单的方法可以返回单个标量或默认值?
此刻我有类似这样的代码示例:
IF (EXISTS (SELECT * FROM Users WHERE Id = @UserId))
SELECT Name FROM Users WHERE Id = @UserId
ELSE
--default value
SELECT 'John Doe'
Run Code Online (Sandbox Code Playgroud)
如何在不使用IF-ELSE的情况下以更好的方式做到这一点?
我正在使用SQL Server 2008.
我有以下内容:
select convert(varchar(20),fmdate) from Sery
Run Code Online (Sandbox Code Playgroud)
如何将日期转换为字符串,使其显示为MM/DD/YYYY
我正在使用SQL Server 2008 R2.
我想要对表中的记录进行基于优先级的排序.
这样我在ORDER BY子句中使用CASE WHEN语句.ORDER BY子句如下:
ORDER BY
CASE WHEN TblList.PinRequestCount <> 0 THEN TblList.PinRequestCount desc, TblList.LastName ASC, TblList.FirstName ASC, TblList.MiddleName ASC END,
CASE WHEN TblList.HighCallAlertCount <> 0 THEN TblList.HighCallAlertCount desc, TblList.LastName ASC, TblList.FirstName ASC, TblList.MiddleName ASC END,
Case WHEN TblList.HighAlertCount <> 0 THEN TblList.HighAlertCount DESC, TblList.LastName ASC, TblList.FirstName ASC, TblList.MiddleName ASC END,
CASE WHEN TblList.MediumCallAlertCount <> 0 THEN TblList.MediumCallAlertCount DESC, TblList.LastName ASC, TblList.FirstName ASC, TblList.MiddleName ASC END,
Case WHEN TblList.MediumAlertCount <> 0 THEN TblList.MediumAlertCount DESC, TblList.LastName …
Run Code Online (Sandbox Code Playgroud) 我从这个数据类型中找到了一个包含此列的表
numeric(18, 0)
Run Code Online (Sandbox Code Playgroud)
那是什么?为什么0
和18
意思
我已经检查过这个问题SQL Server中的数字,浮点数和小数之间的区别但是无法理解它.
我可以在该列中添加(-10)吗?
我可以在该列中添加所有负数吗?
我可以在该列中添加任何正数吗?
这是我在该列中找到的数据样本
100
263
13
2
9
4
3
3
28
15
33
16
135
50
64
60
100
500
150
Run Code Online (Sandbox Code Playgroud)
更新2是否可以拥有-
和+
?
假设程序集dll:
using Microsoft.SqlServer.Server;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System;
using System.Text;
namespace CLRFunctions
{
public class T
{
[SqlFunction(DataAccess = DataAccessKind.Read)]
public static String NormalizeString(String s, String normalizationForm)
{
NormalizationForm form = NormalizationForm.FormC;
if (String.Equals(f, "FormD", StringComparison.OrdinalIgnoreCase))
form = NormalizationForm.FormD;
return = s.Normalize(form);
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意:将程序集目标指向.NET 3.5,因为SQL Server不支持.NET 4.0
将程序集复制到一个位置,"创建"程序集工作正常:
CREATE ASSEMBLY CLRFunctions FROM 'c:\Program Files\My App\CLRFunctions.dll';
Run Code Online (Sandbox Code Playgroud)
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用ORDER BY
子句创建视图.我已经在SQL Server 2012 SP1上成功创建它,但是当我尝试在SQL Server 2008 R2上重新创建它时,我收到此错误:
消息102,级别15,状态1,过程TopUsers,第11行
'OFFSET'附近的语法不正确.
创建视图的代码是
CREATE View [dbo].[TopUsersTest]
as
select
u.[DisplayName] , sum(a.AnswerMark) as Marks
From Users_Questions us inner join [dbo].[Users] u
on u.[UserID] = us.[UserID]
inner join [dbo].[Answers] a
on a.[AnswerID] = us.[AnswerID]
group by [DisplayName]
order by Marks desc
OFFSET 0 ROWS
Run Code Online (Sandbox Code Playgroud)
=====================
这是该图的屏幕截图
我想返回用户DisplayName
和UserTotalMarks
秩序这一结果说明,所以用最大的成果,用户与上顶.
我正在寻找一个SQL查询,它输出数据库目录中所有用户定义函数的函数定义.
我找到了
SELECT OBJECT_DEFINITION (OBJECT_ID(N'dbo.UserFunctionName')) AS [Object Definition]
Run Code Online (Sandbox Code Playgroud)
和
SELECT ROUTINE_NAME FROM information_schema.routines WHERE routine_type = 'function'
Run Code Online (Sandbox Code Playgroud)
但我无法想到或找到将ROUTINE_NAME列表提供给OBJECT_ID的方法.
这里的目的是在数据库中用于数据库变更分析的用户定义函数定义的可搜索文本,如果像完整的SQL过程或有用的帮助程序更容易,我会这样做并发布它.