The following query (without details) ends up with timeout. All columns have nvarchar type. So it is not about this. Query works perfectly without sp_executesql.
exec sp_executesql N'declare @exp nvarchar(max) = ''%'' + @name + ''%''
select u.Id
from [local_db]..Users u
join [linked_server].[remote_db].dbo.Players p on p.PlayerId = u.PlayerId
join [linked_server].[remote_db].dbo.PlayerStats ps on ps.PlayerId = u.PlayerId
where @exp is null or u.Nickname like @exp or u.Name like @exp or p.Nickname like @exp
order by ps.Wins desc
offset @skip rows fetch next @take rows only',N'@skip int,@take int,@name nvarchar(8)',@skip=0,@take=24,@name=N'Foo'
I've found some interesting details. If I remove or p.Nickname like @exp
, it works. The same happens, when I remove or u.Nickname like @exp or u.Name like @exp
. But it's just a thought.
Update
Next query works fine!
exec sp_executesql N'
declare @skip int = 0, @take int = 24, @name nvarchar(8) = N''Foo''
declare @exp nvarchar(max) = ''%'' + @name + ''%''
select u.Id
from [local_db]..Users u
join [linked_server].[remote_db].dbo.Players p on p.PlayerId = u.PlayerId
join [linked_server].[remote_db].dbo.PlayerStats ps on ps.PlayerId = u.PlayerId
where @exp is null or u.Nickname like @exp or u.Name like @exp or p.Nickname like @exp
order by ps.Wins desc
offset @skip rows fetch next @take rows only'