if you want sp_executesql with variables.
openquery do not allow any var's.
CREATE function [dbo].[create_SQL_string](@driver nvarchar(32), @sql nvarchar(max))
returns nvarchar(max)
with execute as caller
as begin
declare @out_sql nvarchar(max)
return 'select * from openquery('+@driver+', '''+REPLACE(@sql,'''','''''')+''')'
end
declare @a nvarchar(512)
set @a = (select [dbo].[create_SQL_string](N'SRV', @query))
exec sp_executesql @a