// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Threading.Tasks; using Xunit; namespace EntityFrameworkCore.Jet.FunctionalTests.Query { public partial class SimpleQueryJetTest { public override async Task Union(bool isAsync) { await base.Union(isAsync); AssertSql( @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] WHERE [c].[City] = 'Berlin' UNION SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] FROM [Customers] AS [c0] WHERE [c0].[City] = 'London'"); } public override async Task Concat(bool isAsync) { await base.Concat(isAsync); AssertSql( @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] WHERE [c].[City] = 'Berlin' UNION ALL SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] FROM [Customers] AS [c0] WHERE [c0].[City] = 'London'"); } public override async Task Intersect(bool isAsync) { await base.Intersect(isAsync); AssertSql( @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] WHERE [c].[City] = 'London' INTERSECT SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] FROM [Customers] AS [c0] WHERE CHARINDEX('Thomas', [c0].[ContactName]) > 0"); } public override async Task Except(bool isAsync) { await base.Except(isAsync); AssertSql( @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] WHERE [c].[City] = 'London' EXCEPT SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] FROM [Customers] AS [c0] WHERE CHARINDEX('Thomas', [c0].[ContactName]) > 0"); } public override async Task Union_OrderBy_Skip_Take(bool isAsync) { await base.Union_OrderBy_Skip_Take(isAsync); AssertSql( @"@__p_0='1' SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region] FROM ( SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] WHERE [c].[City] = 'Berlin' UNION SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] FROM [Customers] AS [c0] WHERE [c0].[City] = 'London' ) AS [t] ORDER BY [t].[ContactName] SKIP @__p_0 FETCH NEXT @__p_0 ROWS ONLY"); } public override async Task Union_Where(bool isAsync) { await base.Union_Where(isAsync); AssertSql( @"SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region] FROM ( SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] WHERE [c].[City] = 'Berlin' UNION SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] FROM [Customers] AS [c0] WHERE [c0].[City] = 'London' ) AS [t] WHERE CHARINDEX('Thomas', [t].[ContactName]) > 0"); } public override async Task Union_Skip_Take_OrderBy_ThenBy_Where(bool isAsync) { await base.Union_Skip_Take_OrderBy_ThenBy_Where(isAsync); AssertSql( @"@__p_0='0' SELECT [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] FROM ( SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region] FROM ( SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] WHERE [c].[City] = 'Berlin' UNION SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] FROM [Customers] AS [c0] WHERE [c0].[City] = 'London' ) AS [t] ORDER BY [t].[Region], [t].[City] SKIP @__p_0 ) AS [t0] WHERE CHARINDEX('Thomas', [t0].[ContactName]) > 0 ORDER BY [t0].[Region], [t0].[City]"); } public override async Task Union_Union(bool isAsync) { await base.Union_Union(isAsync); AssertSql( @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] WHERE [c].[City] = 'Berlin' UNION SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] FROM [Customers] AS [c0] WHERE [c0].[City] = 'London' UNION SELECT [c1].[CustomerID], [c1].[Address], [c1].[City], [c1].[CompanyName], [c1].[ContactName], [c1].[ContactTitle], [c1].[Country], [c1].[Fax], [c1].[Phone], [c1].[PostalCode], [c1].[Region] FROM [Customers] AS [c1] WHERE [c1].[City] = 'Mannheim'"); } public override async Task Union_Intersect(bool isAsync) { await base.Union_Intersect(isAsync); AssertSql( @"( SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] WHERE [c].[City] = 'Berlin' UNION SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] FROM [Customers] AS [c0] WHERE [c0].[City] = 'London' ) INTERSECT SELECT [c1].[CustomerID], [c1].[Address], [c1].[City], [c1].[CompanyName], [c1].[ContactName], [c1].[ContactTitle], [c1].[Country], [c1].[Fax], [c1].[Phone], [c1].[PostalCode], [c1].[Region] FROM [Customers] AS [c1] WHERE CHARINDEX('Thomas', [c1].[ContactName]) > 0"); } [ConditionalTheory] public override async Task Union_Take_Union_Take(bool isAsync) { await base.Union_Take_Union_Take(isAsync); AssertSql( @"@__p_0='1' SELECT [t2].[CustomerID], [t2].[Address], [t2].[City], [t2].[CompanyName], [t2].[ContactName], [t2].[ContactTitle], [t2].[Country], [t2].[Fax], [t2].[Phone], [t2].[PostalCode], [t2].[Region] FROM ( SELECT TOP @__p_0 [t1].[CustomerID], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] FROM ( SELECT [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] FROM ( SELECT TOP @__p_0 [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region] FROM ( SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] WHERE [c].[City] = 'Berlin' UNION SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] FROM [Customers] AS [c0] WHERE [c0].[City] = 'London' ) AS [t] ORDER BY [t].[CustomerID] ) AS [t0] UNION SELECT [c1].[CustomerID], [c1].[Address], [c1].[City], [c1].[CompanyName], [c1].[ContactName], [c1].[ContactTitle], [c1].[Country], [c1].[Fax], [c1].[Phone], [c1].[PostalCode], [c1].[Region] FROM [Customers] AS [c1] WHERE [c1].[City] = 'Mannheim' ) AS [t1] ) AS [t2] ORDER BY [t2].[CustomerID]"); } public override async Task Select_Union(bool isAsync) { await base.Select_Union(isAsync); AssertSql( @"SELECT [c].[Address] FROM [Customers] AS [c] WHERE [c].[City] = 'Berlin' UNION SELECT [c0].[Address] FROM [Customers] AS [c0] WHERE [c0].[City] = 'London'"); } public override async Task Union_Select(bool isAsync) { await base.Union_Select(isAsync); AssertSql( @"SELECT [t].[Address] FROM ( SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] WHERE [c].[City] = 'Berlin' UNION SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] FROM [Customers] AS [c0] WHERE [c0].[City] = 'London' ) AS [t] WHERE CHARINDEX('Hanover', [t].[Address]) > 0"); } public override async Task Union_Select_scalar(bool isAsync) { await base.Union_Select_scalar(isAsync); AssertSql( @"SELECT 1 FROM ( SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] EXCEPT SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] FROM [Customers] AS [c0] ) AS [t]"); } public override async Task Union_with_anonymous_type_projection(bool isAsync) { await base.Union_with_anonymous_type_projection(isAsync); AssertSql( @"SELECT [t].[CustomerID] AS [Id] FROM ( SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] WHERE [c].[CompanyName] IS NOT NULL AND ([c].[CompanyName] LIKE 'A' & '%') UNION SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] FROM [Customers] AS [c0] WHERE [c0].[CompanyName] IS NOT NULL AND ([c0].[CompanyName] LIKE 'B' & '%') ) AS [t]"); } public override async Task Select_Union_unrelated(bool isAsync) { await base.Select_Union_unrelated(isAsync); AssertSql( @"SELECT [t].[ContactName] FROM ( SELECT [c].[ContactName] FROM [Customers] AS [c] UNION SELECT [p].[ProductName] AS [ContactName] FROM [Products] AS [p] ) AS [t] WHERE [t].[ContactName] IS NOT NULL AND ([t].[ContactName] LIKE 'C' & '%') ORDER BY [t].[ContactName]"); } public override async Task Select_Union_different_fields_in_anonymous_with_subquery(bool isAsync) { await base.Select_Union_different_fields_in_anonymous_with_subquery(isAsync); AssertSql( @"@__p_0='1' @__p_1='10' SELECT [t0].[Foo], [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] FROM ( SELECT [t].[Foo], [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region] FROM ( SELECT [c].[City] AS [Foo], [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] WHERE [c].[City] = 'Berlin' UNION SELECT [c0].[Region] AS [Foo], [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] FROM [Customers] AS [c0] WHERE [c0].[City] = 'London' ) AS [t] ORDER BY [t].[Foo] SKIP @__p_0 FETCH NEXT @__p_1 ROWS ONLY ) AS [t0] WHERE [t0].[Foo] = 'Berlin' ORDER BY [t0].[Foo]"); } public override async Task Union_Include(bool isAsync) { await base.Union_Include(isAsync); AssertSql( @"SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM ( SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] WHERE [c].[City] = 'Berlin' UNION SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] FROM [Customers] AS [c0] WHERE [c0].[City] = 'London' ) AS [t] LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] ORDER BY [t].[CustomerID], [o].[OrderID]"); } public override async Task Include_Union(bool isAsync) { await base.Include_Union(isAsync); AssertSql( @"SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM ( SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] WHERE [c].[City] = 'Berlin' UNION SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] FROM [Customers] AS [c0] WHERE [c0].[City] = 'London' ) AS [t] LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] ORDER BY [t].[CustomerID], [o].[OrderID]"); } public override async Task Select_Except_reference_projection(bool isAsync) { await base.Select_Except_reference_projection(isAsync); AssertSql( @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Orders] AS [o] LEFT JOIN [Customers] AS [c] ON [o].[CustomerID] = [c].[CustomerID] EXCEPT SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] FROM [Orders] AS [o0] LEFT JOIN [Customers] AS [c0] ON [o0].[CustomerID] = [c0].[CustomerID] WHERE [o0].[CustomerID] = 'ALFKI'"); } public override async Task SubSelect_Union(bool isAsync) { await base.SubSelect_Union(isAsync); AssertSql( @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ( SELECT COUNT(*) FROM [Orders] AS [o] WHERE [c].[CustomerID] = [o].[CustomerID]) AS [Orders] FROM [Customers] AS [c] UNION SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region], ( SELECT COUNT(*) FROM [Orders] AS [o0] WHERE [c0].[CustomerID] = [o0].[CustomerID]) AS [Orders] FROM [Customers] AS [c0]"); } public override async Task GroupBy_Select_Union(bool isAsync) { await base.GroupBy_Select_Union(isAsync); AssertSql( @"SELECT [c].[CustomerID], COUNT(*) AS [Count] FROM [Customers] AS [c] WHERE [c].[City] = 'Berlin' GROUP BY [c].[CustomerID] UNION SELECT [c0].[CustomerID], COUNT(*) AS [Count] FROM [Customers] AS [c0] WHERE [c0].[City] = 'London' GROUP BY [c0].[CustomerID]"); } public override async Task Union_over_columns_with_different_nullability(bool isAsync) { await base.Union_over_columns_with_different_nullability(isAsync); AssertSql( @"SELECT 'NonNullableConstant' AS [c] FROM [Customers] AS [c] UNION ALL SELECT NULL AS [c] FROM [Customers] AS [c0]"); } public override async Task Union_over_different_projection_types(bool isAsync, string leftType, string rightType) { await base.Union_over_different_projection_types(isAsync, leftType, rightType); var leftSql = GenerateSql(leftType); var rightSql = GenerateSql(rightType); switch (leftType) { case "Column": leftSql = leftSql.Replace("{Alias}", ""); break; case "Binary": case "Constant": case "Function": case "ScalarSubquery": case "Unary": leftSql = leftSql.Replace("{Alias}", " AS [c]"); break; default: throw new ArgumentException("Unexpected type: " + leftType); } switch (rightType) { case "Column": rightSql = rightSql.Replace("{Alias}", leftType == "Column" ? "" : " AS [c]"); break; case "Binary": case "Constant": case "Function": case "ScalarSubquery": case "Unary": rightSql = rightSql.Replace("{Alias}", leftType == "Column" ? " AS [OrderID]" : " AS [c]"); break; default: throw new ArgumentException("Unexpected type: " + rightType); } // Fix up right-side SQL as table aliases shift rightSql = leftType == "ScalarSubquery" ? rightSql.Replace("[o]", "[o1]").Replace("[o0]", "[o2]") : rightSql.Replace("[o0]", "[o1]").Replace("[o]", "[o0]"); AssertSql(leftSql + Environment.NewLine + "UNION" + Environment.NewLine + rightSql); static string GenerateSql(string expressionType) { switch (expressionType) { case "Column": return @"SELECT [o].[OrderID]{Alias} FROM [Orders] AS [o]"; case "Function": return @"SELECT COUNT(*){Alias} FROM [Orders] AS [o] GROUP BY [o].[OrderID]"; case "Constant": return @"SELECT 8{Alias} FROM [Orders] AS [o]"; case "Unary": return @"SELECT -[o].[OrderID]{Alias} FROM [Orders] AS [o]"; case "Binary": return @"SELECT [o].[OrderID] + 1{Alias} FROM [Orders] AS [o]"; case "ScalarSubquery": return @"SELECT ( SELECT COUNT(*) FROM [Order Details] AS [o] WHERE [o0].[OrderID] = [o].[OrderID]){Alias} FROM [Orders] AS [o0]"; default: throw new ArgumentException("Unexpected type: " + expressionType); } } } public override async Task OrderBy_Take_Union(bool isAsync) { await base.OrderBy_Take_Union(isAsync); AssertSql( @"@__p_0='1' SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region] FROM ( SELECT TOP @__p_0 [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] ORDER BY [c].[ContactName] ) AS [t] UNION SELECT [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] FROM ( SELECT TOP @__p_0 [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] FROM [Customers] AS [c0] ORDER BY [c0].[ContactName] ) AS [t0]"); } } }