我正在寻找返回每个参考号的最新记录的最快方法。
我非常喜欢BrentOzar.com 的解决方案,但是当我添加第三个条件 (SequenceId) 时,它似乎不起作用。它似乎只有在我指定 Id 和创建日期时才有效。
要理解我的问题,您需要创建修改后的示例表,它本质上是上述参考网站上的表的副本,但稍有改动。
CREATE TABLE [dbo].[TestTable](
[Id] [int] NOT NULL,
[EffectiveDate] [date] NOT NULL,
[SequenceId] [bigint] IDENTITY(1,1) NOT NULL,
[CustomerId] [varchar](50) NOT NULL,
[AccountNo] [varchar](50) NOT NULL,
CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED
(
[Id] ASC,
[EffectiveDate] ASC,
[SequenceId] ASC
) ON [PRIMARY]
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[TestTable] ON
INSERT [dbo].[TestTable] ([Id], [EffectiveDate], [SequenceId], [CustomerId], [AccountNo])
VALUES (1, CAST(0xDF300B00 AS Date), 1, N'Blue', N'Green')
INSERT [dbo].[TestTable] ([Id], [EffectiveDate], [SequenceId], [CustomerId], [AccountNo])
VALUES …Run Code Online (Sandbox Code Playgroud) performance sql-server t-sql greatest-n-per-group query-performance
我需要在完成之前从存储过程返回部分结果(作为简单的选择)。
有可能这样做吗?
如果是,如何做到这一点?
如果没有,有什么解决方法吗?
编辑:我有几个部分的程序。在第一部分我计算了几个字符串。我稍后会在过程中使用它们来进行附加操作。问题是调用者尽快需要字符串。因此,我需要计算该字符串并将其传回(不知何故,例如从选择中),然后继续工作。调用者更快地获得其有价值的字符串。
调用者是一个 Web 服务。
stored-procedures t-sql sql-server-2012 multi-thread web-service
我今天正在查看一个旧的存储过程,并注意到它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) 我将以下交叉引用表添加到我的 SQL Server 托管的数据库中:
company_id bigint not null (FK)
org_path nvarchar (2048) not null
Run Code Online (Sandbox Code Playgroud)
该company_id字段是指id另一个表中的字段(它是主键)。
鉴于也可以有多条记录具有相同的company_id,任何主键都必须使用这两个字段。但是,我无法使用这两个字段创建密钥,因为org_path对于 SQL Server 来说太长了。
至于org_path,这是它存在的唯一表。对该表的查询很可能会要求所有条目或所有org_path条目company_id。或者换句话说,这个表是否会被 查询,这看起来令人怀疑org_path。此外,不太可能org_path会更新,更有可能插入和 - 可能很少 - 删除。
我预计总行数将在数千个以内。
此外,这nvarchar (2048)是因为该值必须模仿第三方数据库中的值。一个典型的例子是这样的
\Translation Providers\[customer name]\[order name]\
Run Code Online (Sandbox Code Playgroud)
并且可以包含变音符号。
所以我的问题是:添加一个自动增量id字段并将其与company_id主键结合使用会更有效,还是会增加不必要的开销 -company_id另一个表中的主键这一事实是否有任何影响?效果在这里?
我需要解决我遇到的问题,我需要一些帮助来了解 sp_msforeachdb 的工作原理以解决我的问题。
每次运行 sp_msforeachdb 时都会发生错误 Msg 102, Level 15, State 1, Incorrect syntax near '61'
我的代码示例如下:
EXEC SP_msforeachdb 'SELECT ''?'' AS Database
FROM ?.sys.objects
WHERE name like ''%aetna%''
Run Code Online (Sandbox Code Playgroud)
但是,我将什么查询作为 sp_msforeachdb 的参数并不重要。每次我都遇到同样的错误。我确实有一个以“61s1d”开头的数据库,所以我认为它的数据库名称有问题,但老实说,我不知道 sp_msforeachdb 的幕后情况。
注意事项。
我怎样才能克服这个问题?
给定一个这样的分层表:
CREATE TABLE [dbo].[btree]
(
id INT PRIMARY KEY
, parent_id INT REFERENCES [dbo].[btree] ([id])
, name NVARCHAR(20)
);
Run Code Online (Sandbox Code Playgroud)
我想获得整个树结构。
例如,使用此数据:
INSERT INTO [btree] VALUES (1, null, '1 Root');
INSERT INTO [btree] VALUES (2, 1, '1.1 Group');
INSERT INTO [btree] VALUES (3, 1, '1.2 Group');
INSERT INTO [btree] VALUES (4, 2, '1.1.1 Group');
INSERT INTO [btree] VALUES (5, 2, '1.1.2 Group');
INSERT INTO [btree] VALUES (6, 3, '1.2.1 Group');
INSERT INTO [btree] VALUES (7, 3, '1.2.2 Group');
INSERT INTO [btree] …Run Code Online (Sandbox Code Playgroud) 最近我们对我们的数据库使用了一个 sql 代码审查工具。建议使用SP_EXECUTESQL代替EXEC.
我知道SP_EXECUTESQL可以帮助我们避免 sql 注入。使用EXECvs时性能有什么不同吗SP_EXECUTESQL?
performance sql-server dynamic-sql t-sql exec query-performance
如果我将 Microsoft SQL Server 数据库设置为脱机并删除它,它将被删除,但日志和数据文件将保留。如果我在联机模式下执行此操作,则另一个连接可能会阻止我删除它。在开发环境中,或者对于我想定期清理并在生产环境中重新创建的数据库,清理数据库及其数据文件和日志文件的最佳 T-SQL 命令序列是什么,它会一直工作因为我有 sa 权限并且没有人恶意阻止我删除数据库?
背景:
我们正在尝试为我们的一个支持团队创建一个 AG“是主要的”测试工具。不知道在任何给定时间哪些服务器将是主服务器,它们被指示对注册的服务器组执行 TSQL。注册服务器组由AG中的所有服务器组成。目标是只在当前主服务器上执行 TSQL:
当前测试线束:
IF EXISTS (SELECT *
FROM sys.dm_hadr_availability_replica_states AS HARS
INNER JOIN sys.dm_hadr_availability_replica_cluster_states AS HACS ON HACS.replica_id = HARS.replica_id
WHERE (HARS.role_desc = 'PRIMARY') AND (HACS.replica_server_name LIKE @@SERVERNAME))
BEGIN
<<SOME CODE TO EXECUTE>>
END
Run Code Online (Sandbox Code Playgroud)
问题:
如果响应多服务器查询的第一台服务器没有返回任何结果,SSMS 将假定正确的结果集没有结果集,即使其他服务器稍后返回结果集也是如此。因此,在这种情况下,不会返回任何结果……这是不正确的,也不是预期的功能。
谁能想出一种方法,使用 SSMS(这是 CS 团队最熟悉的工具),仅在当前主服务器上强制执行?
当我运行以下查询时
select distinct A.movieID, A.avgStars from
(select mID as movieID, avg(stars) as avgStars
from Rating
group by mID) A
where A.avgStars <= all(select A.avgStars from A);
Run Code Online (Sandbox Code Playgroud)
我收到错误“无效的对象名称‘A’。”
你知道我为什么会得到这个吗?
谢谢!
t-sql ×10
sql-server ×7
performance ×2
dynamic-sql ×1
exec ×1
hierarchy ×1
multi-thread ×1
primary-key ×1
ssms ×1
web-service ×1