我已经对OPTION (FAST XXX)查询提示在SELECT语句中的作用做了一些挖掘,但我仍然对此感到困惑。根据 MSDN:
指定为快速检索第一个 number_rows 优化查询。这是一个非负整数。返回第一个 number_rows 后,查询将继续执行并生成其完整结果集。
对我来说这没有多大意义,但基本上查询可以非常快地获得前 XXX 行,然后以正常速度获得其余行?
让我想到这一点的 Microsoft Dynamics 查询是:
select pjproj.project,pjproj.project_desc,pjproj.customer,pjproj.cpnyid
from pjproj WITH (NOLOCK)
where project like '%'
order by project OPTION(FAST 500)
Run Code Online (Sandbox Code Playgroud)
谁能准确解释这个查询提示在做什么以及它比不使用它的优势?
我今天正在查看一个旧的存储过程,并注意到它quotename在输入参数上使用。在做了一些挖掘以弄清楚它到底做了什么之后,我发现了这个站点。我现在了解它的作用以及如何使用它,但该站点表示它被用作 SQL 注入攻击的缓解措施。当我过去使用 asp.net 开发直接查询数据库的应用程序时,我会使用 ADO.Net 参数将用户输入作为文字值传入,而从不真正担心在我的存储过程中保护它。
我现在正在编写一个存储过程,该过程将由我不编写的应用程序使用,因此我确实需要尝试在过程级别防止注入攻击,这是quotename最好的方法还是有更新的功能/更好的方法?
让我了解这种思维模式的代码(@parm1是用户输入参数):
'SELECT project [Project], project_desc [Description],
customer [Customer], cpnyid [Company]
FROM PJPROJ (nolock)
where project like ' + quotename(@parm1,'''') + '
Run Code Online (Sandbox Code Playgroud) 我的任务是将报告从 SSRS 移动到我们内部的 ASP.Net 应用程序,这涉及我重新编写一些函数和一个存储过程,以提高性能,使它们以应用程序更好地使用的形式输出,并使任何要求的对报告的补充。
我还需要做的是在执行此操作之前从系统中删除旧的功能和过程,尽管我想确保它不会破坏其他任何东西。有没有一种方法可以让我通过所有的程序和函数来查看它们中是否有任何包含对我将要删除的程序的引用?
虽然有成千上万的这些,但我宁愿不必在 SSMS 中一次打开每一个来查看。因此,如果有一些我可以查询的表,或者即使有一个 SQL Server 隐藏的 .sql 文件我可以挖掘,那就太好了。
我正在尝试运行一个脚本,该脚本执行一些工作,包括从列的每一行内的字符串中去除前导两个字符。为此,我正在使用RIGHT()它,当我在 a 中使用它时它工作正常,SELECT..FROM但是当我在 a 中使用相同的代码时UPDATE它失败了
传递给 RIGHT 函数的长度参数无效
为什么它失败了UPDATE但不是SELECT...FROM?
USE JobSight;
DROP TABLE #ReleaseTemp;
SELECT A.MajRelease,
A.MinRelease,
A.Build,
Split.a.value('.', 'VARCHAR(MAX)') AS ReleaseNotes
INTO #ReleaseTemp
FROM
(
SELECT MajRelease,
MinRelease,
Build,
CAST ('<M>' + REPLACE(RelNotes, ';;', '</M><M>') + '</M>' AS XML) AS ReleaseNotes
FROM JobsDB.dbo.ReleaseData
) AS A
CROSS APPLY ReleaseNotes.nodes ('/M') AS Split(a);
UPDATE #ReleaseTemp
SET ReleaseNotes = RIGHT(ReleaseNotes, LEN(ReleaseNotes) - 2);
UPDATE #ReleaseTemp
SET ReleaseNotes = LTRIM(#ReleaseTemp.ReleaseNotes);
SELECT MajRelease, …Run Code Online (Sandbox Code Playgroud) 我正在为我的 ASP.net Web 应用程序设计一个新的 SQL 数据库,我可以预见某些 ID 列在功能需求中会变得非常大INT,BIGINT但这不会持续几年。使用 ASP.net 中的实体框架,更改列数据类型相当容易。所以我想知道,从设计的角度和性能的角度来看,开始使用较小的列类型(如TINYINT和 )SMALLINT并在时间最终到来时增长到INT和是否更好BIGINT?
我需要在两个非常大(几乎 750 个表)的数据库中重建索引,但希望在发生这种情况时阻止用户访问数据库。是否有一种状态可以让我将数据库置于阻止用户访问它但仍允许我重建索引的状态?作为参考,我计划使用http://instadba.com/quick-script-to-defragment-your-sql-server-indexes/上提供的脚本进行重建。
我正在将数据从旧系统迁移到我正在构建的新系统中,并发现有人在做一种不好的做法,即在某些人的姓名开头添加句点,以使他们首先出现在某些下拉列表中。我试图弄清楚如何删除这些句点,当它们是列的第一个字符时,而不删除名称后面的句点(例如中间名首字母)。此更改是在命令期间进行的INSERT INTO SELECT。