diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/Contracts/CopyResultsRequest.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/Contracts/CopyResultsRequest.cs
index 9ec3928a..33c55e06 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/Contracts/CopyResultsRequest.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/Contracts/CopyResultsRequest.cs
@@ -22,6 +22,11 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution.Contracts
///
public class CopyResultsRequestParams : SubsetParams
{
+ ///
+ /// Whether to include the column headers.
+ ///
+ public bool IncludeHeaders { get; set; }
+
///
/// The selections.
///
diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/QueryExecutionService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/QueryExecutionService.cs
index 19b47e1c..b6731a85 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/QueryExecutionService.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/QueryExecutionService.cs
@@ -729,7 +729,9 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution
var lastRowIndex = rowRanges.Last().End;
var builder = new StringBuilder();
var pageSize = 200;
- if (Settings.QueryEditorSettings.Results.CopyIncludeHeaders)
+
+ // We need to respect IncludeHeaders from parameters instead of getting the config value as ADS can explicitly ask for headers
+ if (requestParams.IncludeHeaders)
{
Validate.IsNotNullOrEmptyString(nameof(requestParams.OwnerUri), requestParams.OwnerUri);
Query query;