我有一个 SQL Server 没有使用的筛选的非聚集索引。我很确定优化器正在做正确的选择,但我想强制它使用该索引运行,以便我可以比较计划并了解为什么它更昂贵。
我已经从查询中删除了所有内容,我只是选择了正在过滤的列。
索引定义:
CREATE INDEX idx_all
ON tbl_test (CommentDateTime, name)
INCLUDE (comment, CommentByType)
WHERE CommentByType='INT';
Run Code Online (Sandbox Code Playgroud)
我试图运行的查询是:
SELECT CommentByType
FROM tbl_test WITH (INDEX (idx_all))
WHERE CommentByType='INT';
Run Code Online (Sandbox Code Playgroud)
并且 SQL Server 返回以下错误:
Query processor could not produce a query plan because of the hints defined in this query.
Resubmit the query without specifying any hints and without using SET FORCEPLAN.
Run Code Online (Sandbox Code Playgroud)
我已经阅读了很多关于被过滤的列被包含在键中或作为包含列的信息,但没有任何帮助。
我遇到了这个存储过程的问题。当用户选择“是”时,它应该按照它在“是”的 if 语句中所说的那样做,但它什么也不做,也不向数据库中插入任何内容。它适用于“否”条件。你能告诉我什么不起作用吗?
ALTER PROCEDURE [dbo].[sp_ff_Insert_ProjectApproved]
(
@project_no varchar(6)
,@sequence_no int
,@grant_programme varchar(2)
,@jobs_approved int
,@grant_amount int
,@Committee varchar(4)
,@Meeting_no int
,@Minute_Item int
,@jobs_maintained int
,@approval_date date
,@approval_by int
,@comments varchar(1600)
,@created_by int
,@created_date datetime
,@updated_by int
,@updated_date datetime
,@approval varchar(5)
,@ratify varchar(3)
--,@research_type varchar(1)='T'
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
DECLARE @ReturnValue int,
@post_approval_status varchar(3),
@approval_status varchar(3),
@current_status varchar(3)
set @current_status = ( SELECT approval_status from approval_master_tbl
WHERE project_no = @project_no …
Run Code Online (Sandbox Code Playgroud)