我正在努力在以下场景中设置索引视图,以便在没有两个聚集索引扫描的情况下执行以下查询。每当我为此查询创建索引视图然后使用它时,它似乎忽略了我放在它上面的任何索引:
-- +++ THE QUERY THAT I WANT TO IMPROVE PERFORMANCE-WISE +++
SELECT TOP 1 *
FROM dbo.TB_test1 t1
INNER JOIN dbo.TB_test2 t2 ON t1.PK_ID1 = t2.FK_ID1
ORDER BY t1.somethingelse1
,t2.somethingelse2;
GO
Run Code Online (Sandbox Code Playgroud)
表设置如下:
(在下面的脚本中也有一些行来生成测试数据,以防万一它有助于重现问题)
-- +++ TABLE SETUP +++
CREATE TABLE [dbo].[TB_test1]
(
[PK_ID1] [INT] IDENTITY(1, 1) NOT NULL
,[something1] VARCHAR(40) NOT NULL
,[somethingelse1] BIGINT NOT NULL
CONSTRAINT [PK_TB_test1] PRIMARY KEY CLUSTERED ( [PK_ID1] ASC )
);
GO
create TABLE [dbo].[TB_test2]
(
[PK_ID2] [INT] IDENTITY(1, …Run Code Online (Sandbox Code Playgroud)index sql-server-2008 sql-server materialized-view index-tuning
是否存在最长公共子串问题的 SQL Server 实现?在 SQL Server 中检查列的所有行的解决方案?我见过将两个字符串作为输入的解决方案,但没有查看表中列的所有行的 SQL Server 解决方案。
我确实尝试了一些东西,但老实说,我认为目前有一个解决方案超出了我的脑海,因此欢迎提出任何建议。
这里没有“现实世界”问题,我只是在研究编程问题以及如何使用 SQL Server 解决这些问题。
我们定义了一个服务器登录触发器,用于记录每次登录,并在表中记录诸如 windows/sql 用户名、客户端和时间等信息。
该表没有聚集索引,但它有一个“PK_ID”列,它是 bigint 和自动增量。
上周,我们从“登录表”中总共 9000 万条记录中删除了大约 8000 万条记录(带有delete from......,我们没有truncate该表)。
但从那以后我们看到登录触发器失败的多种情况
由于触发器执行,登录 'SQL\xy' 登录失败。 将数据库上下文更改为“master”。 (Microsoft SQL Server,错误:17892)
我们确实重新启动了整个 Windows 服务器几次,之后错误消失了几个小时,但似乎时不时地回来。请注意,这仅在我们删除了这么多记录后才开始出现。
我们发现在用户无法登录之前,我们收到以下错误:
消息 2801,级别 16,状态 1,: 对象“my_proc”的定义自编译以来已更改。
之后,我们得到了如上所述的错误 17892。
有谁知道可能是什么问题?
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [Tr_My_Logon]
ON ALL SERVER WITH EXECUTE AS 'xy'
FOR LOGON
AS
BEGIN
BEGIN TRY
INSERT INTO mydatabase.myschema.myLogonHistoryTable
SELECT GETDATE(),
ORIGINAL_LOGIN(),
EVENTDATA().value('(/EVENT_INSTANCE/LoginType)[1]', 'varchar(500)'),
@@SPID,
program_name(),
HOST_NAME(),
EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]', 'varchar(500)')
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE() …Run Code Online (Sandbox Code Playgroud) 我有很多包含一些常见列(相同名称和数据类型)的表。在这些列上,我需要执行相同的操作,我想通过存储过程来执行此操作。但是,我目前可以使其工作的唯一方法是使用动态 sql,我宁愿避免这种情况。
有没有什么方法可以在不使用动态sql的情况下对不同的表(其中表名作为参数传递)使用存储过程?