diff --git a/SqlServer.2005.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2005.MS).sql b/SqlServer.2005.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2005.MS).sql index 1169f70ec876..3734628c1323 100644 --- a/SqlServer.2005.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2005.MS).sql +++ b/SqlServer.2005.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2005.MS).sql @@ -1,84 +1,131 @@ -- SqlServer.2005.MS SqlServer.2005 -select @@version - --- SqlServer.2005.MS SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 -[TestDataMS].[dbo].[AddIssue792Record] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) + +-- SqlServer.2005.MS SqlServer.2005 + +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2005.MS SqlServer.2005 [TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2005.MS SqlServer.2005 -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2005.MS SqlServer.2005 @@ -89,34 +136,58 @@ SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2005.MS SqlServer.2005 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[OutRefEnumTest] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestDataMS].[dbo].[ExecuteProcStringParameters] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKey] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2005.MS SqlServer.2005 + +[TestDataMS].[dbo].[Person_SelectAll] -- SqlServer.2005.MS SqlServer.2005 DECLARE @firstName NVarChar(50) -- String @@ -124,13 +195,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +[TestDataMS].[dbo].[Person_SelectByName] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2005.MS SqlServer.2005 DECLARE @FirstName NVarChar(50) -- String @@ -158,38 +231,6 @@ SET @PersonID = 0 [TestDataMS].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2005.MS SqlServer.2005 - -[TestDataMS].[dbo].[Person_SelectAll] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKey] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectByName] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectListByName] - -- SqlServer.2005.MS SqlServer.2005 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -205,36 +246,22 @@ SET @Gender = char(0) [TestDataMS].[dbo].[Person_Update] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2005.MS SqlServer.2005 DECLARE @ReturnFullRow Bit -- Boolean @@ -243,11 +270,29 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2005.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2005.MS).sql b/SqlServer.2005.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2005.MS).sql index ee42f6ba0142..d3fbdf797a1f 100644 --- a/SqlServer.2005.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2005.MS).sql +++ b/SqlServer.2005.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2005.MS).sql @@ -1,189 +1,285 @@ -- SqlServer.2005.MS SqlServer.2005 -select @@version - --- SqlServer.2005.MS SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 -[TestDataMS].[dbo].[AddIssue792Record] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) + +-- SqlServer.2005.MS SqlServer.2005 + +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2005.MS SqlServer.2005 [TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2005.MS SqlServer.2005 -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2005.MS SqlServer.2005 @@ -194,34 +290,58 @@ SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2005.MS SqlServer.2005 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[OutRefEnumTest] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestDataMS].[dbo].[ExecuteProcStringParameters] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKey] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2005.MS SqlServer.2005 + +[TestDataMS].[dbo].[Person_SelectAll] -- SqlServer.2005.MS SqlServer.2005 DECLARE @firstName NVarChar(50) -- String @@ -229,13 +349,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +[TestDataMS].[dbo].[Person_SelectByName] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2005.MS SqlServer.2005 DECLARE @FirstName NVarChar(50) -- String @@ -263,38 +385,6 @@ SET @PersonID = 0 [TestDataMS].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2005.MS SqlServer.2005 - -[TestDataMS].[dbo].[Person_SelectAll] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKey] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectByName] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectListByName] - -- SqlServer.2005.MS SqlServer.2005 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -310,36 +400,22 @@ SET @Gender = char(0) [TestDataMS].[dbo].[Person_Update] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2005.MS SqlServer.2005 DECLARE @ReturnFullRow Bit -- Boolean @@ -348,11 +424,29 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2005.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2005.MS).sql b/SqlServer.2005.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2005.MS).sql index ee42f6ba0142..d3fbdf797a1f 100644 --- a/SqlServer.2005.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2005.MS).sql +++ b/SqlServer.2005.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2005.MS).sql @@ -1,189 +1,285 @@ -- SqlServer.2005.MS SqlServer.2005 -select @@version - --- SqlServer.2005.MS SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 -[TestDataMS].[dbo].[AddIssue792Record] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) + +-- SqlServer.2005.MS SqlServer.2005 + +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2005.MS SqlServer.2005 [TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2005.MS SqlServer.2005 -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2005.MS SqlServer.2005 @@ -194,34 +290,58 @@ SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2005.MS SqlServer.2005 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[OutRefEnumTest] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestDataMS].[dbo].[ExecuteProcStringParameters] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKey] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2005.MS SqlServer.2005 + +[TestDataMS].[dbo].[Person_SelectAll] -- SqlServer.2005.MS SqlServer.2005 DECLARE @firstName NVarChar(50) -- String @@ -229,13 +349,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +[TestDataMS].[dbo].[Person_SelectByName] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2005.MS SqlServer.2005 DECLARE @FirstName NVarChar(50) -- String @@ -263,38 +385,6 @@ SET @PersonID = 0 [TestDataMS].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2005.MS SqlServer.2005 - -[TestDataMS].[dbo].[Person_SelectAll] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKey] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectByName] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectListByName] - -- SqlServer.2005.MS SqlServer.2005 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -310,36 +400,22 @@ SET @Gender = char(0) [TestDataMS].[dbo].[Person_Update] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2005.MS SqlServer.2005 DECLARE @ReturnFullRow Bit -- Boolean @@ -348,11 +424,29 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2005.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2005.MS).sql b/SqlServer.2005.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2005.MS).sql index ee42f6ba0142..d3fbdf797a1f 100644 --- a/SqlServer.2005.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2005.MS).sql +++ b/SqlServer.2005.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2005.MS).sql @@ -1,189 +1,285 @@ -- SqlServer.2005.MS SqlServer.2005 -select @@version - --- SqlServer.2005.MS SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 -[TestDataMS].[dbo].[AddIssue792Record] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) + +-- SqlServer.2005.MS SqlServer.2005 + +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2005.MS SqlServer.2005 [TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2005.MS SqlServer.2005 -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2005.MS SqlServer.2005 @@ -194,34 +290,58 @@ SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2005.MS SqlServer.2005 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[OutRefEnumTest] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestDataMS].[dbo].[ExecuteProcStringParameters] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKey] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2005.MS SqlServer.2005 + +[TestDataMS].[dbo].[Person_SelectAll] -- SqlServer.2005.MS SqlServer.2005 DECLARE @firstName NVarChar(50) -- String @@ -229,13 +349,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +[TestDataMS].[dbo].[Person_SelectByName] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2005.MS SqlServer.2005 DECLARE @FirstName NVarChar(50) -- String @@ -263,38 +385,6 @@ SET @PersonID = 0 [TestDataMS].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2005.MS SqlServer.2005 - -[TestDataMS].[dbo].[Person_SelectAll] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKey] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectByName] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectListByName] - -- SqlServer.2005.MS SqlServer.2005 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -310,36 +400,22 @@ SET @Gender = char(0) [TestDataMS].[dbo].[Person_Update] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2005.MS SqlServer.2005 DECLARE @ReturnFullRow Bit -- Boolean @@ -348,11 +424,29 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2005.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2005.MS).sql b/SqlServer.2005.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2005.MS).sql index 03dad1a182a6..6e6e707577a4 100644 --- a/SqlServer.2005.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2005.MS).sql +++ b/SqlServer.2005.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2005.MS).sql @@ -1,189 +1,285 @@ -- SqlServer.2005.MS SqlServer.2005 -select @@version - --- SqlServer.2005.MS SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 -[TestDataMS].[dbo].[AddIssue792Record] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) + +-- SqlServer.2005.MS SqlServer.2005 + +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2005.MS SqlServer.2005 [TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2005.MS SqlServer.2005 -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2005.MS SqlServer.2005 @@ -194,34 +290,58 @@ SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2005.MS SqlServer.2005 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[OutRefEnumTest] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestDataMS].[dbo].[ExecuteProcStringParameters] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKey] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2005.MS SqlServer.2005 + +[TestDataMS].[dbo].[Person_SelectAll] -- SqlServer.2005.MS SqlServer.2005 DECLARE @firstName NVarChar(50) -- String @@ -229,13 +349,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +[TestDataMS].[dbo].[Person_SelectByName] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2005.MS SqlServer.2005 DECLARE @FirstName NVarChar(50) -- String @@ -263,38 +385,6 @@ SET @PersonID = 0 [TestDataMS].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2005.MS SqlServer.2005 - -[TestDataMS].[dbo].[Person_SelectAll] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKey] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectByName] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectListByName] - -- SqlServer.2005.MS SqlServer.2005 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -310,36 +400,22 @@ SET @Gender = char(0) [TestDataMS].[dbo].[Person_Update] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2005.MS SqlServer.2005 DECLARE @ReturnFullRow Bit -- Boolean @@ -348,331 +424,537 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[OutRefEnumTest] RollbackTransaction -- SqlServer.2005.MS SqlServer.2005 -select @@version - --- SqlServer.2005.MS SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2005.MS SqlServer.2005 -select @@version - --- SqlServer.2005.MS SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2005.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2005.MS).sql b/SqlServer.2005.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2005.MS).sql index 03dad1a182a6..6e6e707577a4 100644 --- a/SqlServer.2005.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2005.MS).sql +++ b/SqlServer.2005.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2005.MS).sql @@ -1,189 +1,285 @@ -- SqlServer.2005.MS SqlServer.2005 -select @@version - --- SqlServer.2005.MS SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 -[TestDataMS].[dbo].[AddIssue792Record] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) + +-- SqlServer.2005.MS SqlServer.2005 + +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2005.MS SqlServer.2005 [TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2005.MS SqlServer.2005 -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2005.MS SqlServer.2005 @@ -194,34 +290,58 @@ SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2005.MS SqlServer.2005 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[OutRefEnumTest] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestDataMS].[dbo].[ExecuteProcStringParameters] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKey] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2005.MS SqlServer.2005 + +[TestDataMS].[dbo].[Person_SelectAll] -- SqlServer.2005.MS SqlServer.2005 DECLARE @firstName NVarChar(50) -- String @@ -229,13 +349,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +[TestDataMS].[dbo].[Person_SelectByName] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2005.MS SqlServer.2005 DECLARE @FirstName NVarChar(50) -- String @@ -263,38 +385,6 @@ SET @PersonID = 0 [TestDataMS].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2005.MS SqlServer.2005 - -[TestDataMS].[dbo].[Person_SelectAll] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKey] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectByName] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectListByName] - -- SqlServer.2005.MS SqlServer.2005 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -310,36 +400,22 @@ SET @Gender = char(0) [TestDataMS].[dbo].[Person_Update] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2005.MS SqlServer.2005 DECLARE @ReturnFullRow Bit -- Boolean @@ -348,331 +424,537 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[OutRefEnumTest] RollbackTransaction -- SqlServer.2005.MS SqlServer.2005 -select @@version - --- SqlServer.2005.MS SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2005.MS SqlServer.2005 -select @@version - --- SqlServer.2005.MS SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2005.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2005.MS).sql b/SqlServer.2005.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2005.MS).sql index 85252e39b7be..5702ce42f4e4 100644 --- a/SqlServer.2005.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2005.MS).sql +++ b/SqlServer.2005.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2005.MS).sql @@ -7,228 +7,340 @@ FROM -- SqlServer.2005.MS SqlServer.2005 -select @@version - --- SqlServer.2005.MS SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 -[TestDataMS].[dbo].[AddIssue792Record] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) + +-- SqlServer.2005.MS SqlServer.2005 + +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2005.MS SqlServer.2005 [TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[AddIssue792Record] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] + +-- SqlServer.2005.MS SqlServer.2005 + +[TestDataMS].[dbo].[Issue1897] + +-- SqlServer.2005.MS SqlServer.2005 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2005.MS SqlServer.2005 DECLARE @input Int -- Int32 SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Issue1897] +[TestDataMS].[dbo].[ExecuteProcIntParameters] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() +[TestDataMS].[dbo].[ExecuteProcStringParameters] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestDataMS].[dbo].[OutRefEnumTest] +[TestDataMS].[dbo].[Person_SelectByKey] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[Person_SelectByKeyLowercase] -- SqlServer.2005.MS SqlServer.2005 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[Person_SelectAll] -- SqlServer.2005.MS SqlServer.2005 DECLARE @firstName NVarChar(50) -- String @@ -236,13 +348,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +[TestDataMS].[dbo].[Person_SelectByName] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2005.MS SqlServer.2005 DECLARE @FirstName NVarChar(50) -- String @@ -270,38 +384,6 @@ SET @PersonID = 0 [TestDataMS].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2005.MS SqlServer.2005 - -[TestDataMS].[dbo].[Person_SelectAll] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKey] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectByName] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectListByName] - -- SqlServer.2005.MS SqlServer.2005 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -317,36 +399,22 @@ SET @Gender = char(0) [TestDataMS].[dbo].[Person_Update] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2005.MS SqlServer.2005 DECLARE @ReturnFullRow Bit -- Boolean @@ -354,4 +422,30 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' + +[TestDataMS].[dbo].[OutRefTest] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' + +[TestDataMS].[dbo].[OutRefEnumTest] + RollbackTransaction diff --git a/SqlServer.2005.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2005.MS).sql b/SqlServer.2005.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2005.MS).sql index 85252e39b7be..5702ce42f4e4 100644 --- a/SqlServer.2005.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2005.MS).sql +++ b/SqlServer.2005.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2005.MS).sql @@ -7,228 +7,340 @@ FROM -- SqlServer.2005.MS SqlServer.2005 -select @@version - --- SqlServer.2005.MS SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 -[TestDataMS].[dbo].[AddIssue792Record] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) + +-- SqlServer.2005.MS SqlServer.2005 + +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2005.MS SqlServer.2005 [TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[AddIssue792Record] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] + +-- SqlServer.2005.MS SqlServer.2005 + +[TestDataMS].[dbo].[Issue1897] + +-- SqlServer.2005.MS SqlServer.2005 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2005.MS SqlServer.2005 DECLARE @input Int -- Int32 SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Issue1897] +[TestDataMS].[dbo].[ExecuteProcIntParameters] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() +[TestDataMS].[dbo].[ExecuteProcStringParameters] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestDataMS].[dbo].[OutRefEnumTest] +[TestDataMS].[dbo].[Person_SelectByKey] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[Person_SelectByKeyLowercase] -- SqlServer.2005.MS SqlServer.2005 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[Person_SelectAll] -- SqlServer.2005.MS SqlServer.2005 DECLARE @firstName NVarChar(50) -- String @@ -236,13 +348,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +[TestDataMS].[dbo].[Person_SelectByName] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2005.MS SqlServer.2005 DECLARE @FirstName NVarChar(50) -- String @@ -270,38 +384,6 @@ SET @PersonID = 0 [TestDataMS].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2005.MS SqlServer.2005 - -[TestDataMS].[dbo].[Person_SelectAll] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKey] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectByName] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectListByName] - -- SqlServer.2005.MS SqlServer.2005 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -317,36 +399,22 @@ SET @Gender = char(0) [TestDataMS].[dbo].[Person_Update] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2005.MS SqlServer.2005 DECLARE @ReturnFullRow Bit -- Boolean @@ -354,4 +422,30 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' + +[TestDataMS].[dbo].[OutRefTest] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' + +[TestDataMS].[dbo].[OutRefEnumTest] + RollbackTransaction diff --git a/SqlServer.2005.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2005.MS).sql b/SqlServer.2005.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2005.MS).sql index ee42f6ba0142..d3fbdf797a1f 100644 --- a/SqlServer.2005.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2005.MS).sql +++ b/SqlServer.2005.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2005.MS).sql @@ -1,189 +1,285 @@ -- SqlServer.2005.MS SqlServer.2005 -select @@version - --- SqlServer.2005.MS SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 -[TestDataMS].[dbo].[AddIssue792Record] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) + +-- SqlServer.2005.MS SqlServer.2005 + +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2005.MS SqlServer.2005 [TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2005.MS SqlServer.2005 -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2005.MS SqlServer.2005 @@ -194,34 +290,58 @@ SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2005.MS SqlServer.2005 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[OutRefEnumTest] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestDataMS].[dbo].[ExecuteProcStringParameters] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKey] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2005.MS SqlServer.2005 + +[TestDataMS].[dbo].[Person_SelectAll] -- SqlServer.2005.MS SqlServer.2005 DECLARE @firstName NVarChar(50) -- String @@ -229,13 +349,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +[TestDataMS].[dbo].[Person_SelectByName] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2005.MS SqlServer.2005 DECLARE @FirstName NVarChar(50) -- String @@ -263,38 +385,6 @@ SET @PersonID = 0 [TestDataMS].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2005.MS SqlServer.2005 - -[TestDataMS].[dbo].[Person_SelectAll] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKey] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectByName] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectListByName] - -- SqlServer.2005.MS SqlServer.2005 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -310,36 +400,22 @@ SET @Gender = char(0) [TestDataMS].[dbo].[Person_Update] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2005.MS SqlServer.2005 DECLARE @ReturnFullRow Bit -- Boolean @@ -348,11 +424,29 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2005.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2005.MS).sql b/SqlServer.2005.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2005.MS).sql index ee42f6ba0142..d3fbdf797a1f 100644 --- a/SqlServer.2005.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2005.MS).sql +++ b/SqlServer.2005.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2005.MS).sql @@ -1,189 +1,285 @@ -- SqlServer.2005.MS SqlServer.2005 -select @@version - --- SqlServer.2005.MS SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 -[TestDataMS].[dbo].[AddIssue792Record] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) + +-- SqlServer.2005.MS SqlServer.2005 + +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2005.MS SqlServer.2005 [TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2005.MS SqlServer.2005 -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2005.MS SqlServer.2005 @@ -194,34 +290,58 @@ SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2005.MS SqlServer.2005 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[OutRefEnumTest] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestDataMS].[dbo].[ExecuteProcStringParameters] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKey] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2005.MS SqlServer.2005 + +[TestDataMS].[dbo].[Person_SelectAll] -- SqlServer.2005.MS SqlServer.2005 DECLARE @firstName NVarChar(50) -- String @@ -229,13 +349,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +[TestDataMS].[dbo].[Person_SelectByName] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2005.MS SqlServer.2005 DECLARE @FirstName NVarChar(50) -- String @@ -263,38 +385,6 @@ SET @PersonID = 0 [TestDataMS].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2005.MS SqlServer.2005 - -[TestDataMS].[dbo].[Person_SelectAll] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKey] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectByName] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectListByName] - -- SqlServer.2005.MS SqlServer.2005 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -310,36 +400,22 @@ SET @Gender = char(0) [TestDataMS].[dbo].[Person_Update] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2005.MS SqlServer.2005 DECLARE @ReturnFullRow Bit -- Boolean @@ -348,11 +424,29 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2005.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2005.MS).sql b/SqlServer.2005.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2005.MS).sql index ee42f6ba0142..d3fbdf797a1f 100644 --- a/SqlServer.2005.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2005.MS).sql +++ b/SqlServer.2005.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2005.MS).sql @@ -1,189 +1,285 @@ -- SqlServer.2005.MS SqlServer.2005 -select @@version - --- SqlServer.2005.MS SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005.MS SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 -[TestDataMS].[dbo].[AddIssue792Record] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) + +-- SqlServer.2005.MS SqlServer.2005 + +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2005.MS SqlServer.2005 [TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2005.MS SqlServer.2005 -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2005.MS SqlServer.2005 @@ -194,34 +290,58 @@ SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2005.MS SqlServer.2005 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[OutRefEnumTest] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestDataMS].[dbo].[ExecuteProcStringParameters] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKey] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2005.MS SqlServer.2005 + +[TestDataMS].[dbo].[Person_SelectAll] -- SqlServer.2005.MS SqlServer.2005 DECLARE @firstName NVarChar(50) -- String @@ -229,13 +349,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +[TestDataMS].[dbo].[Person_SelectByName] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2005.MS SqlServer.2005 DECLARE @FirstName NVarChar(50) -- String @@ -263,38 +385,6 @@ SET @PersonID = 0 [TestDataMS].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2005.MS SqlServer.2005 - -[TestDataMS].[dbo].[Person_SelectAll] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKey] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectByName] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectListByName] - -- SqlServer.2005.MS SqlServer.2005 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -310,36 +400,22 @@ SET @Gender = char(0) [TestDataMS].[dbo].[Person_Update] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2005.MS SqlServer.2005 DECLARE @ReturnFullRow Bit -- Boolean @@ -348,11 +424,29 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2005.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2005.MS).sql b/SqlServer.2005.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2005.MS).sql index 58a8bd7b8edf..90b1f4d72c8c 100644 --- a/SqlServer.2005.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2005.MS).sql +++ b/SqlServer.2005.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2005.MS).sql @@ -7,9 +7,5 @@ FROM -- SqlServer.2005.MS SqlServer.2005 -select @@version - --- SqlServer.2005.MS SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() diff --git a/SqlServer.2005.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2005.MS).sql b/SqlServer.2005.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2005.MS).sql index c4c266540c10..966514682ee4 100644 --- a/SqlServer.2005.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2005.MS).sql +++ b/SqlServer.2005.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2005.MS).sql @@ -14,123 +14,186 @@ FROM -- SqlServer.2005.MS SqlServer.2005 -select @@version - --- SqlServer.2005.MS SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2005.MS SqlServer.2005 -[TestDataMS].[dbo].[AddIssue792Record] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) + +-- SqlServer.2005.MS SqlServer.2005 + +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2005.MS SqlServer.2005 [TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[AddIssue792Record] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] + +-- SqlServer.2005.MS SqlServer.2005 + +[TestDataMS].[dbo].[Issue1897] + +-- SqlServer.2005.MS SqlServer.2005 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2005.MS SqlServer.2005 DECLARE @input Int -- Int32 SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Issue1897] +[TestDataMS].[dbo].[ExecuteProcIntParameters] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() +[TestDataMS].[dbo].[ExecuteProcStringParameters] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestDataMS].[dbo].[OutRefEnumTest] +[TestDataMS].[dbo].[Person_SelectByKey] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[Person_SelectByKeyLowercase] -- SqlServer.2005.MS SqlServer.2005 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[Person_SelectAll] -- SqlServer.2005.MS SqlServer.2005 DECLARE @firstName NVarChar(50) -- String @@ -138,13 +201,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +[TestDataMS].[dbo].[Person_SelectByName] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2005.MS SqlServer.2005 DECLARE @FirstName NVarChar(50) -- String @@ -172,38 +237,6 @@ SET @PersonID = 0 [TestDataMS].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2005.MS SqlServer.2005 - -[TestDataMS].[dbo].[Person_SelectAll] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKey] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectByName] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectListByName] - -- SqlServer.2005.MS SqlServer.2005 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -219,36 +252,22 @@ SET @Gender = char(0) [TestDataMS].[dbo].[Person_Update] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - --- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2005.MS SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2005.MS SqlServer.2005 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2005.MS SqlServer.2005 DECLARE @ReturnFullRow Bit -- Boolean @@ -256,6 +275,32 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' + +[TestDataMS].[dbo].[OutRefTest] + +-- SqlServer.2005.MS SqlServer.2005 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' + +[TestDataMS].[dbo].[OutRefEnumTest] + RollbackTransaction -- SqlServer.2005.MS SqlServer.2005 diff --git a/SqlServer.2005/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2005).sql b/SqlServer.2005/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2005).sql index efbb78eac1d7..0dd609de03c6 100644 --- a/SqlServer.2005/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2005).sql +++ b/SqlServer.2005/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2005).sql @@ -1,84 +1,131 @@ -- SqlServer.2005 -select @@version - --- SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 -[TestData].[dbo].[AddIssue792Record] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) + +-- SqlServer.2005 + +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2005 [TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2005 -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) + +-- SqlServer.2005 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] -- SqlServer.2005 @@ -89,34 +136,58 @@ SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2005 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[OutRefEnumTest] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2005 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestData].[dbo].[ExecuteProcStringParameters] + +-- SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKey] + +-- SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2005 + +[TestData].[dbo].[Person_SelectAll] -- SqlServer.2005 DECLARE @firstName NVarChar(50) -- String @@ -124,13 +195,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +[TestData].[dbo].[Person_SelectByName] -- SqlServer.2005 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[Person_SelectListByName] -- SqlServer.2005 DECLARE @FirstName NVarChar(50) -- String @@ -158,38 +231,6 @@ SET @PersonID = 0 [TestData].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2005 - -[TestData].[dbo].[Person_SelectAll] - --- SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKey] - --- SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectByName] - --- SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectListByName] - -- SqlServer.2005 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -205,36 +246,22 @@ SET @Gender = char(0) [TestData].[dbo].[Person_Update] -- SqlServer.2005 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - --- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Person_Delete] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2005 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2005 DECLARE @ReturnFullRow Bit -- Boolean @@ -243,11 +270,29 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2005 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +[TestData].[dbo].[OutRefTest] -- SqlServer.2005 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2005/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2005).sql b/SqlServer.2005/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2005).sql index d425ab53a429..953a69eb8a83 100644 --- a/SqlServer.2005/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2005).sql +++ b/SqlServer.2005/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2005).sql @@ -1,189 +1,285 @@ -- SqlServer.2005 -select @@version - --- SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 -[TestData].[dbo].[AddIssue792Record] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) + +-- SqlServer.2005 + +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2005 [TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2005 -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) + +-- SqlServer.2005 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] -- SqlServer.2005 @@ -194,34 +290,58 @@ SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2005 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[OutRefEnumTest] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2005 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestData].[dbo].[ExecuteProcStringParameters] + +-- SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKey] + +-- SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2005 + +[TestData].[dbo].[Person_SelectAll] -- SqlServer.2005 DECLARE @firstName NVarChar(50) -- String @@ -229,13 +349,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +[TestData].[dbo].[Person_SelectByName] -- SqlServer.2005 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[Person_SelectListByName] -- SqlServer.2005 DECLARE @FirstName NVarChar(50) -- String @@ -263,38 +385,6 @@ SET @PersonID = 0 [TestData].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2005 - -[TestData].[dbo].[Person_SelectAll] - --- SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKey] - --- SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectByName] - --- SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectListByName] - -- SqlServer.2005 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -310,36 +400,22 @@ SET @Gender = char(0) [TestData].[dbo].[Person_Update] -- SqlServer.2005 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - --- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Person_Delete] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2005 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2005 DECLARE @ReturnFullRow Bit -- Boolean @@ -348,11 +424,29 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2005 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +[TestData].[dbo].[OutRefTest] -- SqlServer.2005 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2005/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2005).sql b/SqlServer.2005/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2005).sql index d425ab53a429..953a69eb8a83 100644 --- a/SqlServer.2005/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2005).sql +++ b/SqlServer.2005/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2005).sql @@ -1,189 +1,285 @@ -- SqlServer.2005 -select @@version - --- SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 -[TestData].[dbo].[AddIssue792Record] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) + +-- SqlServer.2005 + +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2005 [TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2005 -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) + +-- SqlServer.2005 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] -- SqlServer.2005 @@ -194,34 +290,58 @@ SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2005 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[OutRefEnumTest] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2005 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestData].[dbo].[ExecuteProcStringParameters] + +-- SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKey] + +-- SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2005 + +[TestData].[dbo].[Person_SelectAll] -- SqlServer.2005 DECLARE @firstName NVarChar(50) -- String @@ -229,13 +349,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +[TestData].[dbo].[Person_SelectByName] -- SqlServer.2005 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[Person_SelectListByName] -- SqlServer.2005 DECLARE @FirstName NVarChar(50) -- String @@ -263,38 +385,6 @@ SET @PersonID = 0 [TestData].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2005 - -[TestData].[dbo].[Person_SelectAll] - --- SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKey] - --- SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectByName] - --- SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectListByName] - -- SqlServer.2005 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -310,36 +400,22 @@ SET @Gender = char(0) [TestData].[dbo].[Person_Update] -- SqlServer.2005 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - --- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Person_Delete] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2005 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2005 DECLARE @ReturnFullRow Bit -- Boolean @@ -348,11 +424,29 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2005 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +[TestData].[dbo].[OutRefTest] -- SqlServer.2005 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2005/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2005).sql b/SqlServer.2005/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2005).sql index d425ab53a429..953a69eb8a83 100644 --- a/SqlServer.2005/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2005).sql +++ b/SqlServer.2005/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2005).sql @@ -1,189 +1,285 @@ -- SqlServer.2005 -select @@version - --- SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 -[TestData].[dbo].[AddIssue792Record] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) + +-- SqlServer.2005 + +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2005 [TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2005 -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) + +-- SqlServer.2005 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] -- SqlServer.2005 @@ -194,34 +290,58 @@ SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2005 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[OutRefEnumTest] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2005 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestData].[dbo].[ExecuteProcStringParameters] + +-- SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKey] + +-- SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2005 + +[TestData].[dbo].[Person_SelectAll] -- SqlServer.2005 DECLARE @firstName NVarChar(50) -- String @@ -229,13 +349,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +[TestData].[dbo].[Person_SelectByName] -- SqlServer.2005 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[Person_SelectListByName] -- SqlServer.2005 DECLARE @FirstName NVarChar(50) -- String @@ -263,38 +385,6 @@ SET @PersonID = 0 [TestData].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2005 - -[TestData].[dbo].[Person_SelectAll] - --- SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKey] - --- SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectByName] - --- SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectListByName] - -- SqlServer.2005 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -310,36 +400,22 @@ SET @Gender = char(0) [TestData].[dbo].[Person_Update] -- SqlServer.2005 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - --- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Person_Delete] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2005 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2005 DECLARE @ReturnFullRow Bit -- Boolean @@ -348,11 +424,29 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2005 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +[TestData].[dbo].[OutRefTest] -- SqlServer.2005 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2005/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2005).sql b/SqlServer.2005/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2005).sql index 6a1eec82008b..76ce5e70f5b9 100644 --- a/SqlServer.2005/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2005).sql +++ b/SqlServer.2005/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2005).sql @@ -1,189 +1,285 @@ -- SqlServer.2005 -select @@version - --- SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 -[TestData].[dbo].[AddIssue792Record] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) + +-- SqlServer.2005 + +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2005 [TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2005 -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) + +-- SqlServer.2005 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] -- SqlServer.2005 @@ -194,34 +290,58 @@ SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2005 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[OutRefEnumTest] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2005 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestData].[dbo].[ExecuteProcStringParameters] + +-- SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKey] + +-- SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2005 + +[TestData].[dbo].[Person_SelectAll] -- SqlServer.2005 DECLARE @firstName NVarChar(50) -- String @@ -229,13 +349,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +[TestData].[dbo].[Person_SelectByName] -- SqlServer.2005 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[Person_SelectListByName] -- SqlServer.2005 DECLARE @FirstName NVarChar(50) -- String @@ -263,38 +385,6 @@ SET @PersonID = 0 [TestData].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2005 - -[TestData].[dbo].[Person_SelectAll] - --- SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKey] - --- SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectByName] - --- SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectListByName] - -- SqlServer.2005 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -310,36 +400,22 @@ SET @Gender = char(0) [TestData].[dbo].[Person_Update] -- SqlServer.2005 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - --- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Person_Delete] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2005 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2005 DECLARE @ReturnFullRow Bit -- Boolean @@ -348,331 +424,537 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2005 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +[TestData].[dbo].[OutRefTest] -- SqlServer.2005 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[OutRefEnumTest] RollbackTransaction -- SqlServer.2005 -select @@version - --- SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2005 -select @@version - --- SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2005/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2005).sql b/SqlServer.2005/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2005).sql index 6a1eec82008b..76ce5e70f5b9 100644 --- a/SqlServer.2005/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2005).sql +++ b/SqlServer.2005/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2005).sql @@ -1,189 +1,285 @@ -- SqlServer.2005 -select @@version - --- SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 -[TestData].[dbo].[AddIssue792Record] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) + +-- SqlServer.2005 + +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2005 [TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2005 -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) + +-- SqlServer.2005 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] -- SqlServer.2005 @@ -194,34 +290,58 @@ SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2005 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[OutRefEnumTest] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2005 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestData].[dbo].[ExecuteProcStringParameters] + +-- SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKey] + +-- SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2005 + +[TestData].[dbo].[Person_SelectAll] -- SqlServer.2005 DECLARE @firstName NVarChar(50) -- String @@ -229,13 +349,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +[TestData].[dbo].[Person_SelectByName] -- SqlServer.2005 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[Person_SelectListByName] -- SqlServer.2005 DECLARE @FirstName NVarChar(50) -- String @@ -263,38 +385,6 @@ SET @PersonID = 0 [TestData].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2005 - -[TestData].[dbo].[Person_SelectAll] - --- SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKey] - --- SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectByName] - --- SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectListByName] - -- SqlServer.2005 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -310,36 +400,22 @@ SET @Gender = char(0) [TestData].[dbo].[Person_Update] -- SqlServer.2005 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - --- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Person_Delete] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2005 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2005 DECLARE @ReturnFullRow Bit -- Boolean @@ -348,331 +424,537 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2005 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +[TestData].[dbo].[OutRefTest] -- SqlServer.2005 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[OutRefEnumTest] RollbackTransaction -- SqlServer.2005 -select @@version - --- SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2005 -select @@version - --- SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2005/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2005).sql b/SqlServer.2005/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2005).sql index 2637719a6658..37a3101cc099 100644 --- a/SqlServer.2005/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2005).sql +++ b/SqlServer.2005/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2005).sql @@ -7,228 +7,340 @@ FROM -- SqlServer.2005 -select @@version - --- SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 -[TestData].[dbo].[AddIssue792Record] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) + +-- SqlServer.2005 + +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2005 [TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[AddIssue792Record] + +-- SqlServer.2005 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] + +-- SqlServer.2005 + +[TestData].[dbo].[Issue1897] + +-- SqlServer.2005 + +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2005 DECLARE @input Int -- Int32 SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Issue1897] +[TestData].[dbo].[ExecuteProcIntParameters] -- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -SELECT * FROM [TestData].[dbo].[Issue1921]() +[TestData].[dbo].[ExecuteProcStringParameters] -- SqlServer.2005 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestData].[dbo].[OutRefEnumTest] +[TestData].[dbo].[Person_SelectByKey] -- SqlServer.2005 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[Person_SelectByKeyLowercase] -- SqlServer.2005 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[Person_SelectAll] -- SqlServer.2005 DECLARE @firstName NVarChar(50) -- String @@ -236,13 +348,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +[TestData].[dbo].[Person_SelectByName] -- SqlServer.2005 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[Person_SelectListByName] -- SqlServer.2005 DECLARE @FirstName NVarChar(50) -- String @@ -270,38 +384,6 @@ SET @PersonID = 0 [TestData].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2005 - -[TestData].[dbo].[Person_SelectAll] - --- SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKey] - --- SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectByName] - --- SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectListByName] - -- SqlServer.2005 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -317,36 +399,22 @@ SET @Gender = char(0) [TestData].[dbo].[Person_Update] -- SqlServer.2005 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - --- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Person_Delete] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2005 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2005 DECLARE @ReturnFullRow Bit -- Boolean @@ -354,4 +422,30 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] +-- SqlServer.2005 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' + +[TestData].[dbo].[OutRefTest] + +-- SqlServer.2005 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' + +[TestData].[dbo].[OutRefEnumTest] + RollbackTransaction diff --git a/SqlServer.2005/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2005).sql b/SqlServer.2005/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2005).sql index 2637719a6658..37a3101cc099 100644 --- a/SqlServer.2005/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2005).sql +++ b/SqlServer.2005/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2005).sql @@ -7,228 +7,340 @@ FROM -- SqlServer.2005 -select @@version - --- SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 -[TestData].[dbo].[AddIssue792Record] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) + +-- SqlServer.2005 + +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2005 [TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[AddIssue792Record] + +-- SqlServer.2005 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] + +-- SqlServer.2005 + +[TestData].[dbo].[Issue1897] + +-- SqlServer.2005 + +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2005 DECLARE @input Int -- Int32 SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Issue1897] +[TestData].[dbo].[ExecuteProcIntParameters] -- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -SELECT * FROM [TestData].[dbo].[Issue1921]() +[TestData].[dbo].[ExecuteProcStringParameters] -- SqlServer.2005 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestData].[dbo].[OutRefEnumTest] +[TestData].[dbo].[Person_SelectByKey] -- SqlServer.2005 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[Person_SelectByKeyLowercase] -- SqlServer.2005 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[Person_SelectAll] -- SqlServer.2005 DECLARE @firstName NVarChar(50) -- String @@ -236,13 +348,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +[TestData].[dbo].[Person_SelectByName] -- SqlServer.2005 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[Person_SelectListByName] -- SqlServer.2005 DECLARE @FirstName NVarChar(50) -- String @@ -270,38 +384,6 @@ SET @PersonID = 0 [TestData].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2005 - -[TestData].[dbo].[Person_SelectAll] - --- SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKey] - --- SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectByName] - --- SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectListByName] - -- SqlServer.2005 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -317,36 +399,22 @@ SET @Gender = char(0) [TestData].[dbo].[Person_Update] -- SqlServer.2005 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - --- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Person_Delete] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2005 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2005 DECLARE @ReturnFullRow Bit -- Boolean @@ -354,4 +422,30 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] +-- SqlServer.2005 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' + +[TestData].[dbo].[OutRefTest] + +-- SqlServer.2005 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' + +[TestData].[dbo].[OutRefEnumTest] + RollbackTransaction diff --git a/SqlServer.2005/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2005).sql b/SqlServer.2005/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2005).sql index d425ab53a429..953a69eb8a83 100644 --- a/SqlServer.2005/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2005).sql +++ b/SqlServer.2005/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2005).sql @@ -1,189 +1,285 @@ -- SqlServer.2005 -select @@version - --- SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 -[TestData].[dbo].[AddIssue792Record] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) + +-- SqlServer.2005 + +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2005 [TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2005 -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) + +-- SqlServer.2005 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] -- SqlServer.2005 @@ -194,34 +290,58 @@ SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2005 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[OutRefEnumTest] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2005 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestData].[dbo].[ExecuteProcStringParameters] + +-- SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKey] + +-- SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2005 + +[TestData].[dbo].[Person_SelectAll] -- SqlServer.2005 DECLARE @firstName NVarChar(50) -- String @@ -229,13 +349,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +[TestData].[dbo].[Person_SelectByName] -- SqlServer.2005 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[Person_SelectListByName] -- SqlServer.2005 DECLARE @FirstName NVarChar(50) -- String @@ -263,38 +385,6 @@ SET @PersonID = 0 [TestData].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2005 - -[TestData].[dbo].[Person_SelectAll] - --- SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKey] - --- SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectByName] - --- SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectListByName] - -- SqlServer.2005 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -310,36 +400,22 @@ SET @Gender = char(0) [TestData].[dbo].[Person_Update] -- SqlServer.2005 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - --- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Person_Delete] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2005 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2005 DECLARE @ReturnFullRow Bit -- Boolean @@ -348,11 +424,29 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2005 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +[TestData].[dbo].[OutRefTest] -- SqlServer.2005 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2005/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2005).sql b/SqlServer.2005/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2005).sql index d425ab53a429..953a69eb8a83 100644 --- a/SqlServer.2005/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2005).sql +++ b/SqlServer.2005/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2005).sql @@ -1,189 +1,285 @@ -- SqlServer.2005 -select @@version - --- SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 -[TestData].[dbo].[AddIssue792Record] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) + +-- SqlServer.2005 + +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2005 [TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2005 -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) + +-- SqlServer.2005 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] -- SqlServer.2005 @@ -194,34 +290,58 @@ SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2005 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[OutRefEnumTest] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2005 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestData].[dbo].[ExecuteProcStringParameters] + +-- SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKey] + +-- SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2005 + +[TestData].[dbo].[Person_SelectAll] -- SqlServer.2005 DECLARE @firstName NVarChar(50) -- String @@ -229,13 +349,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +[TestData].[dbo].[Person_SelectByName] -- SqlServer.2005 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[Person_SelectListByName] -- SqlServer.2005 DECLARE @FirstName NVarChar(50) -- String @@ -263,38 +385,6 @@ SET @PersonID = 0 [TestData].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2005 - -[TestData].[dbo].[Person_SelectAll] - --- SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKey] - --- SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectByName] - --- SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectListByName] - -- SqlServer.2005 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -310,36 +400,22 @@ SET @Gender = char(0) [TestData].[dbo].[Person_Update] -- SqlServer.2005 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - --- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Person_Delete] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2005 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2005 DECLARE @ReturnFullRow Bit -- Boolean @@ -348,11 +424,29 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2005 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +[TestData].[dbo].[OutRefTest] -- SqlServer.2005 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2005/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2005).sql b/SqlServer.2005/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2005).sql index d425ab53a429..953a69eb8a83 100644 --- a/SqlServer.2005/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2005).sql +++ b/SqlServer.2005/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2005).sql @@ -1,189 +1,285 @@ -- SqlServer.2005 -select @@version - --- SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2005 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2005 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 -[TestData].[dbo].[AddIssue792Record] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) + +-- SqlServer.2005 + +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2005 [TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2005 -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) + +-- SqlServer.2005 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] -- SqlServer.2005 @@ -194,34 +290,58 @@ SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2005 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[OutRefEnumTest] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2005 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestData].[dbo].[ExecuteProcStringParameters] + +-- SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKey] + +-- SqlServer.2005 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2005 + +[TestData].[dbo].[Person_SelectAll] -- SqlServer.2005 DECLARE @firstName NVarChar(50) -- String @@ -229,13 +349,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +[TestData].[dbo].[Person_SelectByName] -- SqlServer.2005 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[Person_SelectListByName] -- SqlServer.2005 DECLARE @FirstName NVarChar(50) -- String @@ -263,38 +385,6 @@ SET @PersonID = 0 [TestData].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2005 - -[TestData].[dbo].[Person_SelectAll] - --- SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKey] - --- SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectByName] - --- SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectListByName] - -- SqlServer.2005 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -310,36 +400,22 @@ SET @Gender = char(0) [TestData].[dbo].[Person_Update] -- SqlServer.2005 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - --- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Person_Delete] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2005 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2005 DECLARE @ReturnFullRow Bit -- Boolean @@ -348,11 +424,29 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2005 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +[TestData].[dbo].[OutRefTest] -- SqlServer.2005 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2005/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2005).sql b/SqlServer.2005/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2005).sql index 764627cef619..751acd933212 100644 --- a/SqlServer.2005/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2005).sql +++ b/SqlServer.2005/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2005).sql @@ -7,9 +7,5 @@ FROM -- SqlServer.2005 -select @@version - --- SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() diff --git a/SqlServer.2005/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2005).sql b/SqlServer.2005/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2005).sql index 3f53e3c8aded..b0715d1bf12f 100644 --- a/SqlServer.2005/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2005).sql +++ b/SqlServer.2005/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2005).sql @@ -14,123 +14,186 @@ FROM -- SqlServer.2005 -select @@version - --- SqlServer.2005 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2005 -[TestData].[dbo].[AddIssue792Record] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) + +-- SqlServer.2005 + +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2005 [TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[AddIssue792Record] + +-- SqlServer.2005 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] + +-- SqlServer.2005 + +[TestData].[dbo].[Issue1897] + +-- SqlServer.2005 + +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2005 DECLARE @input Int -- Int32 SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Issue1897] +[TestData].[dbo].[ExecuteProcIntParameters] -- SqlServer.2005 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -SELECT * FROM [TestData].[dbo].[Issue1921]() +[TestData].[dbo].[ExecuteProcStringParameters] -- SqlServer.2005 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestData].[dbo].[OutRefEnumTest] +[TestData].[dbo].[Person_SelectByKey] -- SqlServer.2005 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[Person_SelectByKeyLowercase] -- SqlServer.2005 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[Person_SelectAll] -- SqlServer.2005 DECLARE @firstName NVarChar(50) -- String @@ -138,13 +201,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +[TestData].[dbo].[Person_SelectByName] -- SqlServer.2005 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[Person_SelectListByName] -- SqlServer.2005 DECLARE @FirstName NVarChar(50) -- String @@ -172,38 +237,6 @@ SET @PersonID = 0 [TestData].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2005 - -[TestData].[dbo].[Person_SelectAll] - --- SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKey] - --- SqlServer.2005 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectByName] - --- SqlServer.2005 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectListByName] - -- SqlServer.2005 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -219,36 +252,22 @@ SET @Gender = char(0) [TestData].[dbo].[Person_Update] -- SqlServer.2005 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - --- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Person_Delete] -- SqlServer.2005 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2005 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2005 DECLARE @ReturnFullRow Bit -- Boolean @@ -256,6 +275,32 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] +-- SqlServer.2005 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' + +[TestData].[dbo].[OutRefTest] + +-- SqlServer.2005 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' + +[TestData].[dbo].[OutRefEnumTest] + RollbackTransaction -- SqlServer.2005 diff --git a/SqlServer.2008.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2008.MS).sql b/SqlServer.2008.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2008.MS).sql index 57dd0614bcf3..0164bdcdd76f 100644 --- a/SqlServer.2008.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2008.MS).sql +++ b/SqlServer.2008.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2008.MS).sql @@ -1,166 +1,183 @@ -- SqlServer.2008.MS SqlServer.2008 -select @@version - --- SqlServer.2008.MS SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2008.MS SqlServer.2008 - -[TestDataMS].[dbo].[AddIssue792Record] + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[DuplicateColumnNames] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2008.MS SqlServer.2008 -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -[TestDataMS].[dbo].[Issue1897] +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2008.MS SqlServer.2008 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' -[TestDataMS].[dbo].[OutRefEnumTest] +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2008.MS SqlServer.2008 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[Issue1897] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2008.MS SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMS].[dbo].[Person_Insert] +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Person_Insert_OutputParameter] +[TestDataMS].[dbo].[ExecuteProcIntParameters] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Person_SelectAll] +[TestDataMS].[dbo].[ExecuteProcStringParameters] -- SqlServer.2008.MS SqlServer.2008 DECLARE @id Int -- Int32 @@ -174,6 +191,10 @@ SET @id = 0 [TestDataMS].[dbo].[Person_SelectByKeyLowercase] +-- SqlServer.2008.MS SqlServer.2008 + +[TestDataMS].[dbo].[Person_SelectAll] + -- SqlServer.2008.MS SqlServer.2008 DECLARE @firstName NVarChar(50) -- String SET @firstName = N'' @@ -191,8 +212,6 @@ SET @lastName = N'' [TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 DECLARE @FirstName NVarChar(50) -- String SET @FirstName = N'' DECLARE @LastName NVarChar(50) -- String @@ -202,45 +221,53 @@ SET @MiddleName = N'' DECLARE @Gender Char(1) -- AnsiStringFixedLength SET @Gender = char(0) -[TestDataMS].[dbo].[Person_Update] +[TestDataMS].[dbo].[Person_Insert] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[PersonSearch] +[TestDataMS].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Person_Update] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[TableTypeTestProc] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2008.MS SqlServer.2008 DECLARE @ReturnFullRow Bit -- Boolean @@ -249,11 +276,29 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2008.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2008.MS).sql b/SqlServer.2008.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2008.MS).sql index 097337f6f654..21aafa0fbf49 100644 --- a/SqlServer.2008.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2008.MS).sql +++ b/SqlServer.2008.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2008.MS).sql @@ -1,271 +1,337 @@ -- SqlServer.2008.MS SqlServer.2008 -select @@version - --- SqlServer.2008.MS SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[AddIssue792Record] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[DuplicateColumnNames] +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[Issue1897] +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2008.MS SqlServer.2008 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - --- SqlServer.2008.MS SqlServer.2008 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' - -[TestDataMS].[dbo].[OutRefEnumTest] +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2008.MS SqlServer.2008 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[Issue1897] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2008.MS SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMS].[dbo].[Person_Insert] +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Person_Insert_OutputParameter] +[TestDataMS].[dbo].[ExecuteProcIntParameters] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Person_SelectAll] +[TestDataMS].[dbo].[ExecuteProcStringParameters] -- SqlServer.2008.MS SqlServer.2008 DECLARE @id Int -- Int32 @@ -279,6 +345,10 @@ SET @id = 0 [TestDataMS].[dbo].[Person_SelectByKeyLowercase] +-- SqlServer.2008.MS SqlServer.2008 + +[TestDataMS].[dbo].[Person_SelectAll] + -- SqlServer.2008.MS SqlServer.2008 DECLARE @firstName NVarChar(50) -- String SET @firstName = N'' @@ -296,8 +366,6 @@ SET @lastName = N'' [TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 DECLARE @FirstName NVarChar(50) -- String SET @FirstName = N'' DECLARE @LastName NVarChar(50) -- String @@ -307,45 +375,53 @@ SET @MiddleName = N'' DECLARE @Gender Char(1) -- AnsiStringFixedLength SET @Gender = char(0) -[TestDataMS].[dbo].[Person_Update] +[TestDataMS].[dbo].[Person_Insert] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[PersonSearch] +[TestDataMS].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Person_Update] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[TableTypeTestProc] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2008.MS SqlServer.2008 DECLARE @ReturnFullRow Bit -- Boolean @@ -354,11 +430,29 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2008.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2008.MS).sql b/SqlServer.2008.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2008.MS).sql index 097337f6f654..21aafa0fbf49 100644 --- a/SqlServer.2008.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2008.MS).sql +++ b/SqlServer.2008.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2008.MS).sql @@ -1,271 +1,337 @@ -- SqlServer.2008.MS SqlServer.2008 -select @@version - --- SqlServer.2008.MS SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[AddIssue792Record] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[DuplicateColumnNames] +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[Issue1897] +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2008.MS SqlServer.2008 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - --- SqlServer.2008.MS SqlServer.2008 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' - -[TestDataMS].[dbo].[OutRefEnumTest] +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2008.MS SqlServer.2008 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[Issue1897] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2008.MS SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMS].[dbo].[Person_Insert] +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Person_Insert_OutputParameter] +[TestDataMS].[dbo].[ExecuteProcIntParameters] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Person_SelectAll] +[TestDataMS].[dbo].[ExecuteProcStringParameters] -- SqlServer.2008.MS SqlServer.2008 DECLARE @id Int -- Int32 @@ -279,6 +345,10 @@ SET @id = 0 [TestDataMS].[dbo].[Person_SelectByKeyLowercase] +-- SqlServer.2008.MS SqlServer.2008 + +[TestDataMS].[dbo].[Person_SelectAll] + -- SqlServer.2008.MS SqlServer.2008 DECLARE @firstName NVarChar(50) -- String SET @firstName = N'' @@ -296,8 +366,6 @@ SET @lastName = N'' [TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 DECLARE @FirstName NVarChar(50) -- String SET @FirstName = N'' DECLARE @LastName NVarChar(50) -- String @@ -307,45 +375,53 @@ SET @MiddleName = N'' DECLARE @Gender Char(1) -- AnsiStringFixedLength SET @Gender = char(0) -[TestDataMS].[dbo].[Person_Update] +[TestDataMS].[dbo].[Person_Insert] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[PersonSearch] +[TestDataMS].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Person_Update] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[TableTypeTestProc] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2008.MS SqlServer.2008 DECLARE @ReturnFullRow Bit -- Boolean @@ -354,11 +430,29 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2008.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2008.MS).sql b/SqlServer.2008.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2008.MS).sql index 097337f6f654..21aafa0fbf49 100644 --- a/SqlServer.2008.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2008.MS).sql +++ b/SqlServer.2008.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2008.MS).sql @@ -1,271 +1,337 @@ -- SqlServer.2008.MS SqlServer.2008 -select @@version - --- SqlServer.2008.MS SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[AddIssue792Record] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[DuplicateColumnNames] +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[Issue1897] +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2008.MS SqlServer.2008 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - --- SqlServer.2008.MS SqlServer.2008 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' - -[TestDataMS].[dbo].[OutRefEnumTest] +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2008.MS SqlServer.2008 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[Issue1897] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2008.MS SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMS].[dbo].[Person_Insert] +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Person_Insert_OutputParameter] +[TestDataMS].[dbo].[ExecuteProcIntParameters] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Person_SelectAll] +[TestDataMS].[dbo].[ExecuteProcStringParameters] -- SqlServer.2008.MS SqlServer.2008 DECLARE @id Int -- Int32 @@ -279,6 +345,10 @@ SET @id = 0 [TestDataMS].[dbo].[Person_SelectByKeyLowercase] +-- SqlServer.2008.MS SqlServer.2008 + +[TestDataMS].[dbo].[Person_SelectAll] + -- SqlServer.2008.MS SqlServer.2008 DECLARE @firstName NVarChar(50) -- String SET @firstName = N'' @@ -296,8 +366,6 @@ SET @lastName = N'' [TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 DECLARE @FirstName NVarChar(50) -- String SET @FirstName = N'' DECLARE @LastName NVarChar(50) -- String @@ -307,45 +375,53 @@ SET @MiddleName = N'' DECLARE @Gender Char(1) -- AnsiStringFixedLength SET @Gender = char(0) -[TestDataMS].[dbo].[Person_Update] +[TestDataMS].[dbo].[Person_Insert] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[PersonSearch] +[TestDataMS].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Person_Update] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[TableTypeTestProc] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2008.MS SqlServer.2008 DECLARE @ReturnFullRow Bit -- Boolean @@ -354,11 +430,29 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2008.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2008.MS).sql b/SqlServer.2008.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2008.MS).sql index 1a9ffb3876ff..76c61c07a003 100644 --- a/SqlServer.2008.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2008.MS).sql +++ b/SqlServer.2008.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2008.MS).sql @@ -1,271 +1,337 @@ -- SqlServer.2008.MS SqlServer.2008 -select @@version - --- SqlServer.2008.MS SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[AddIssue792Record] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[DuplicateColumnNames] - --- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 - -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2008.MS SqlServer.2008 -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -[TestDataMS].[dbo].[Issue1897] +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2008.MS SqlServer.2008 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' -[TestDataMS].[dbo].[OutRefEnumTest] +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2008.MS SqlServer.2008 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[Issue1897] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2008.MS SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMS].[dbo].[Person_Insert] +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Person_Insert_OutputParameter] +[TestDataMS].[dbo].[ExecuteProcIntParameters] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Person_SelectAll] +[TestDataMS].[dbo].[ExecuteProcStringParameters] -- SqlServer.2008.MS SqlServer.2008 DECLARE @id Int -- Int32 @@ -279,6 +345,10 @@ SET @id = 0 [TestDataMS].[dbo].[Person_SelectByKeyLowercase] +-- SqlServer.2008.MS SqlServer.2008 + +[TestDataMS].[dbo].[Person_SelectAll] + -- SqlServer.2008.MS SqlServer.2008 DECLARE @firstName NVarChar(50) -- String SET @firstName = N'' @@ -296,8 +366,6 @@ SET @lastName = N'' [TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 DECLARE @FirstName NVarChar(50) -- String SET @FirstName = N'' DECLARE @LastName NVarChar(50) -- String @@ -307,45 +375,53 @@ SET @MiddleName = N'' DECLARE @Gender Char(1) -- AnsiStringFixedLength SET @Gender = char(0) -[TestDataMS].[dbo].[Person_Update] +[TestDataMS].[dbo].[Person_Insert] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[PersonSearch] +[TestDataMS].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Person_Update] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[TableTypeTestProc] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2008.MS SqlServer.2008 DECLARE @ReturnFullRow Bit -- Boolean @@ -354,331 +430,537 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[OutRefEnumTest] RollbackTransaction -- SqlServer.2008.MS SqlServer.2008 -select @@version - --- SqlServer.2008.MS SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2008.MS SqlServer.2008 -select @@version - --- SqlServer.2008.MS SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2008.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2008.MS).sql b/SqlServer.2008.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2008.MS).sql index 1a9ffb3876ff..76c61c07a003 100644 --- a/SqlServer.2008.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2008.MS).sql +++ b/SqlServer.2008.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2008.MS).sql @@ -1,271 +1,337 @@ -- SqlServer.2008.MS SqlServer.2008 -select @@version - --- SqlServer.2008.MS SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[AddIssue792Record] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[DuplicateColumnNames] - --- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 - -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2008.MS SqlServer.2008 -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -[TestDataMS].[dbo].[Issue1897] +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2008.MS SqlServer.2008 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' -[TestDataMS].[dbo].[OutRefEnumTest] +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2008.MS SqlServer.2008 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[Issue1897] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2008.MS SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMS].[dbo].[Person_Insert] +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Person_Insert_OutputParameter] +[TestDataMS].[dbo].[ExecuteProcIntParameters] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Person_SelectAll] +[TestDataMS].[dbo].[ExecuteProcStringParameters] -- SqlServer.2008.MS SqlServer.2008 DECLARE @id Int -- Int32 @@ -279,6 +345,10 @@ SET @id = 0 [TestDataMS].[dbo].[Person_SelectByKeyLowercase] +-- SqlServer.2008.MS SqlServer.2008 + +[TestDataMS].[dbo].[Person_SelectAll] + -- SqlServer.2008.MS SqlServer.2008 DECLARE @firstName NVarChar(50) -- String SET @firstName = N'' @@ -296,8 +366,6 @@ SET @lastName = N'' [TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 DECLARE @FirstName NVarChar(50) -- String SET @FirstName = N'' DECLARE @LastName NVarChar(50) -- String @@ -307,45 +375,53 @@ SET @MiddleName = N'' DECLARE @Gender Char(1) -- AnsiStringFixedLength SET @Gender = char(0) -[TestDataMS].[dbo].[Person_Update] +[TestDataMS].[dbo].[Person_Insert] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[PersonSearch] +[TestDataMS].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Person_Update] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[TableTypeTestProc] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2008.MS SqlServer.2008 DECLARE @ReturnFullRow Bit -- Boolean @@ -354,331 +430,537 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[OutRefEnumTest] RollbackTransaction -- SqlServer.2008.MS SqlServer.2008 -select @@version - --- SqlServer.2008.MS SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2008.MS SqlServer.2008 -select @@version - --- SqlServer.2008.MS SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2008.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2008.MS).sql b/SqlServer.2008.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2008.MS).sql index 850625161334..b064c69ba1bc 100644 --- a/SqlServer.2008.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2008.MS).sql +++ b/SqlServer.2008.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2008.MS).sql @@ -7,190 +7,284 @@ FROM -- SqlServer.2008.MS SqlServer.2008 -select @@version - --- SqlServer.2008.MS SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[AddIssue792Record] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) + +-- SqlServer.2008.MS SqlServer.2008 + +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2008.MS SqlServer.2008 [TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2008.MS SqlServer.2008 @@ -201,34 +295,58 @@ SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2008.MS SqlServer.2008 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[OutRefEnumTest] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2008.MS SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestDataMS].[dbo].[ExecuteProcStringParameters] + +-- SqlServer.2008.MS SqlServer.2008 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKey] + +-- SqlServer.2008.MS SqlServer.2008 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2008.MS SqlServer.2008 + +[TestDataMS].[dbo].[Person_SelectAll] -- SqlServer.2008.MS SqlServer.2008 DECLARE @firstName NVarChar(50) -- String @@ -236,13 +354,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +[TestDataMS].[dbo].[Person_SelectByName] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2008.MS SqlServer.2008 DECLARE @FirstName NVarChar(50) -- String @@ -270,38 +390,6 @@ SET @PersonID = 0 [TestDataMS].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2008.MS SqlServer.2008 - -[TestDataMS].[dbo].[Person_SelectAll] - --- SqlServer.2008.MS SqlServer.2008 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKey] - --- SqlServer.2008.MS SqlServer.2008 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2008.MS SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectByName] - --- SqlServer.2008.MS SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectListByName] - -- SqlServer.2008.MS SqlServer.2008 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -317,47 +405,53 @@ SET @Gender = char(0) [TestDataMS].[dbo].[Person_Update] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[PersonSearch] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[dbo].[TableTypeTestProc] +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[dbo].[VariableResults] +[TestDataMS].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2008.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2008.MS).sql b/SqlServer.2008.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2008.MS).sql index 850625161334..b064c69ba1bc 100644 --- a/SqlServer.2008.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2008.MS).sql +++ b/SqlServer.2008.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2008.MS).sql @@ -7,190 +7,284 @@ FROM -- SqlServer.2008.MS SqlServer.2008 -select @@version - --- SqlServer.2008.MS SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[AddIssue792Record] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) + +-- SqlServer.2008.MS SqlServer.2008 + +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2008.MS SqlServer.2008 [TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2008.MS SqlServer.2008 @@ -201,34 +295,58 @@ SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2008.MS SqlServer.2008 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[OutRefEnumTest] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2008.MS SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestDataMS].[dbo].[ExecuteProcStringParameters] + +-- SqlServer.2008.MS SqlServer.2008 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKey] + +-- SqlServer.2008.MS SqlServer.2008 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2008.MS SqlServer.2008 + +[TestDataMS].[dbo].[Person_SelectAll] -- SqlServer.2008.MS SqlServer.2008 DECLARE @firstName NVarChar(50) -- String @@ -236,13 +354,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +[TestDataMS].[dbo].[Person_SelectByName] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2008.MS SqlServer.2008 DECLARE @FirstName NVarChar(50) -- String @@ -270,38 +390,6 @@ SET @PersonID = 0 [TestDataMS].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2008.MS SqlServer.2008 - -[TestDataMS].[dbo].[Person_SelectAll] - --- SqlServer.2008.MS SqlServer.2008 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKey] - --- SqlServer.2008.MS SqlServer.2008 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2008.MS SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectByName] - --- SqlServer.2008.MS SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectListByName] - -- SqlServer.2008.MS SqlServer.2008 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -317,47 +405,53 @@ SET @Gender = char(0) [TestDataMS].[dbo].[Person_Update] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[PersonSearch] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[dbo].[TableTypeTestProc] +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[dbo].[VariableResults] +[TestDataMS].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2008.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2008.MS).sql b/SqlServer.2008.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2008.MS).sql index 097337f6f654..21aafa0fbf49 100644 --- a/SqlServer.2008.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2008.MS).sql +++ b/SqlServer.2008.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2008.MS).sql @@ -1,271 +1,337 @@ -- SqlServer.2008.MS SqlServer.2008 -select @@version - --- SqlServer.2008.MS SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[AddIssue792Record] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[DuplicateColumnNames] +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[Issue1897] +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2008.MS SqlServer.2008 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - --- SqlServer.2008.MS SqlServer.2008 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' - -[TestDataMS].[dbo].[OutRefEnumTest] +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2008.MS SqlServer.2008 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[Issue1897] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2008.MS SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMS].[dbo].[Person_Insert] +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Person_Insert_OutputParameter] +[TestDataMS].[dbo].[ExecuteProcIntParameters] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Person_SelectAll] +[TestDataMS].[dbo].[ExecuteProcStringParameters] -- SqlServer.2008.MS SqlServer.2008 DECLARE @id Int -- Int32 @@ -279,6 +345,10 @@ SET @id = 0 [TestDataMS].[dbo].[Person_SelectByKeyLowercase] +-- SqlServer.2008.MS SqlServer.2008 + +[TestDataMS].[dbo].[Person_SelectAll] + -- SqlServer.2008.MS SqlServer.2008 DECLARE @firstName NVarChar(50) -- String SET @firstName = N'' @@ -296,8 +366,6 @@ SET @lastName = N'' [TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 DECLARE @FirstName NVarChar(50) -- String SET @FirstName = N'' DECLARE @LastName NVarChar(50) -- String @@ -307,45 +375,53 @@ SET @MiddleName = N'' DECLARE @Gender Char(1) -- AnsiStringFixedLength SET @Gender = char(0) -[TestDataMS].[dbo].[Person_Update] +[TestDataMS].[dbo].[Person_Insert] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[PersonSearch] +[TestDataMS].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Person_Update] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[TableTypeTestProc] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2008.MS SqlServer.2008 DECLARE @ReturnFullRow Bit -- Boolean @@ -354,11 +430,29 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2008.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2008.MS).sql b/SqlServer.2008.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2008.MS).sql index 097337f6f654..21aafa0fbf49 100644 --- a/SqlServer.2008.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2008.MS).sql +++ b/SqlServer.2008.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2008.MS).sql @@ -1,271 +1,337 @@ -- SqlServer.2008.MS SqlServer.2008 -select @@version - --- SqlServer.2008.MS SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[AddIssue792Record] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[DuplicateColumnNames] +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[Issue1897] +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2008.MS SqlServer.2008 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - --- SqlServer.2008.MS SqlServer.2008 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' - -[TestDataMS].[dbo].[OutRefEnumTest] +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2008.MS SqlServer.2008 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[Issue1897] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2008.MS SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMS].[dbo].[Person_Insert] +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Person_Insert_OutputParameter] +[TestDataMS].[dbo].[ExecuteProcIntParameters] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Person_SelectAll] +[TestDataMS].[dbo].[ExecuteProcStringParameters] -- SqlServer.2008.MS SqlServer.2008 DECLARE @id Int -- Int32 @@ -279,6 +345,10 @@ SET @id = 0 [TestDataMS].[dbo].[Person_SelectByKeyLowercase] +-- SqlServer.2008.MS SqlServer.2008 + +[TestDataMS].[dbo].[Person_SelectAll] + -- SqlServer.2008.MS SqlServer.2008 DECLARE @firstName NVarChar(50) -- String SET @firstName = N'' @@ -296,8 +366,6 @@ SET @lastName = N'' [TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 DECLARE @FirstName NVarChar(50) -- String SET @FirstName = N'' DECLARE @LastName NVarChar(50) -- String @@ -307,45 +375,53 @@ SET @MiddleName = N'' DECLARE @Gender Char(1) -- AnsiStringFixedLength SET @Gender = char(0) -[TestDataMS].[dbo].[Person_Update] +[TestDataMS].[dbo].[Person_Insert] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[PersonSearch] +[TestDataMS].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Person_Update] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[TableTypeTestProc] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2008.MS SqlServer.2008 DECLARE @ReturnFullRow Bit -- Boolean @@ -354,11 +430,29 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2008.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2008.MS).sql b/SqlServer.2008.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2008.MS).sql index 097337f6f654..21aafa0fbf49 100644 --- a/SqlServer.2008.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2008.MS).sql +++ b/SqlServer.2008.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2008.MS).sql @@ -1,271 +1,337 @@ -- SqlServer.2008.MS SqlServer.2008 -select @@version - --- SqlServer.2008.MS SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008.MS SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[AddIssue792Record] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[DuplicateColumnNames] +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[Issue1897] +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2008.MS SqlServer.2008 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - --- SqlServer.2008.MS SqlServer.2008 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' - -[TestDataMS].[dbo].[OutRefEnumTest] +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2008.MS SqlServer.2008 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[Issue1897] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2008.MS SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMS].[dbo].[Person_Insert] +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Person_Insert_OutputParameter] +[TestDataMS].[dbo].[ExecuteProcIntParameters] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Person_SelectAll] +[TestDataMS].[dbo].[ExecuteProcStringParameters] -- SqlServer.2008.MS SqlServer.2008 DECLARE @id Int -- Int32 @@ -279,6 +345,10 @@ SET @id = 0 [TestDataMS].[dbo].[Person_SelectByKeyLowercase] +-- SqlServer.2008.MS SqlServer.2008 + +[TestDataMS].[dbo].[Person_SelectAll] + -- SqlServer.2008.MS SqlServer.2008 DECLARE @firstName NVarChar(50) -- String SET @firstName = N'' @@ -296,8 +366,6 @@ SET @lastName = N'' [TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 DECLARE @FirstName NVarChar(50) -- String SET @FirstName = N'' DECLARE @LastName NVarChar(50) -- String @@ -307,45 +375,53 @@ SET @MiddleName = N'' DECLARE @Gender Char(1) -- AnsiStringFixedLength SET @Gender = char(0) -[TestDataMS].[dbo].[Person_Update] +[TestDataMS].[dbo].[Person_Insert] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[PersonSearch] +[TestDataMS].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Person_Update] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[TableTypeTestProc] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2008.MS SqlServer.2008 DECLARE @ReturnFullRow Bit -- Boolean @@ -354,11 +430,29 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2008.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2008.MS).sql b/SqlServer.2008.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2008.MS).sql index 7bb145f7b8da..64c62e37608a 100644 --- a/SqlServer.2008.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2008.MS).sql +++ b/SqlServer.2008.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2008.MS).sql @@ -7,9 +7,5 @@ FROM -- SqlServer.2008.MS SqlServer.2008 -select @@version - --- SqlServer.2008.MS SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() diff --git a/SqlServer.2008.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2008.MS).sql b/SqlServer.2008.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2008.MS).sql index 495d2a419bdb..a0826b7573fe 100644 --- a/SqlServer.2008.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2008.MS).sql +++ b/SqlServer.2008.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2008.MS).sql @@ -14,85 +14,130 @@ FROM -- SqlServer.2008.MS SqlServer.2008 -select @@version - --- SqlServer.2008.MS SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2008.MS SqlServer.2008 -[TestDataMS].[dbo].[AddIssue792Record] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) + +-- SqlServer.2008.MS SqlServer.2008 + +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2008.MS SqlServer.2008 [TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2008.MS SqlServer.2008 @@ -103,34 +148,58 @@ SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2008.MS SqlServer.2008 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[OutRefEnumTest] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2008.MS SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestDataMS].[dbo].[ExecuteProcStringParameters] + +-- SqlServer.2008.MS SqlServer.2008 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKey] + +-- SqlServer.2008.MS SqlServer.2008 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2008.MS SqlServer.2008 + +[TestDataMS].[dbo].[Person_SelectAll] -- SqlServer.2008.MS SqlServer.2008 DECLARE @firstName NVarChar(50) -- String @@ -138,13 +207,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +[TestDataMS].[dbo].[Person_SelectByName] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2008.MS SqlServer.2008 DECLARE @FirstName NVarChar(50) -- String @@ -172,38 +243,6 @@ SET @PersonID = 0 [TestDataMS].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2008.MS SqlServer.2008 - -[TestDataMS].[dbo].[Person_SelectAll] - --- SqlServer.2008.MS SqlServer.2008 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKey] - --- SqlServer.2008.MS SqlServer.2008 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2008.MS SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectByName] - --- SqlServer.2008.MS SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectListByName] - -- SqlServer.2008.MS SqlServer.2008 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -219,48 +258,54 @@ SET @Gender = char(0) [TestDataMS].[dbo].[Person_Update] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[PersonSearch] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2008.MS SqlServer.2008 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[dbo].[TableTypeTestProc] +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2008.MS SqlServer.2008 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[dbo].[VariableResults] +[TestDataMS].[dbo].[OutRefEnumTest] RollbackTransaction -- SqlServer.2008.MS SqlServer.2008 diff --git a/SqlServer.2008/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2008).sql b/SqlServer.2008/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2008).sql index 91511e9d6621..3297c9f9da3f 100644 --- a/SqlServer.2008/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2008).sql +++ b/SqlServer.2008/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2008).sql @@ -1,166 +1,183 @@ -- SqlServer.2008 -select @@version - --- SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2008 - -[TestData].[dbo].[AddIssue792Record] + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 -[TestData].[dbo].[DuplicateColumnNames] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2008 -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2008 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -[TestData].[dbo].[Issue1897] +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2008 -SELECT * FROM [TestData].[dbo].[Issue1921]() +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2008 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' -[TestData].[dbo].[OutRefEnumTest] +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2008 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[PersonSearch] -- SqlServer.2008 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[Issue1897] -- SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[Person_Insert] +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Person_Insert_OutputParameter] +[TestData].[dbo].[ExecuteProcIntParameters] -- SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Person_SelectAll] +[TestData].[dbo].[ExecuteProcStringParameters] -- SqlServer.2008 DECLARE @id Int -- Int32 @@ -174,6 +191,10 @@ SET @id = 0 [TestData].[dbo].[Person_SelectByKeyLowercase] +-- SqlServer.2008 + +[TestData].[dbo].[Person_SelectAll] + -- SqlServer.2008 DECLARE @firstName NVarChar(50) -- String SET @firstName = N'' @@ -191,8 +212,6 @@ SET @lastName = N'' [TestData].[dbo].[Person_SelectListByName] -- SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 DECLARE @FirstName NVarChar(50) -- String SET @FirstName = N'' DECLARE @LastName NVarChar(50) -- String @@ -202,45 +221,53 @@ SET @MiddleName = N'' DECLARE @Gender Char(1) -- AnsiStringFixedLength SET @Gender = char(0) -[TestData].[dbo].[Person_Update] +[TestData].[dbo].[Person_Insert] -- SqlServer.2008 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[PersonSearch] +[TestData].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Person_Update] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Person_Delete] -- SqlServer.2008 -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2008 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[TableTypeTestProc] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2008 DECLARE @ReturnFullRow Bit -- Boolean @@ -249,11 +276,29 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2008 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +[TestData].[dbo].[OutRefTest] -- SqlServer.2008 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2008/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2008).sql b/SqlServer.2008/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2008).sql index 67834b246be5..b9019d2f6500 100644 --- a/SqlServer.2008/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2008).sql +++ b/SqlServer.2008/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2008).sql @@ -1,271 +1,337 @@ -- SqlServer.2008 -select @@version - --- SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 -[TestData].[dbo].[AddIssue792Record] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2008 -[TestData].[dbo].[DuplicateColumnNames] +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2008 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2008 -[TestData].[dbo].[Issue1897] +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2008 -SELECT * FROM [TestData].[dbo].[Issue1921]() - --- SqlServer.2008 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' - -[TestData].[dbo].[OutRefEnumTest] +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2008 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[PersonSearch] -- SqlServer.2008 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[Issue1897] -- SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[Person_Insert] +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Person_Insert_OutputParameter] +[TestData].[dbo].[ExecuteProcIntParameters] -- SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Person_SelectAll] +[TestData].[dbo].[ExecuteProcStringParameters] -- SqlServer.2008 DECLARE @id Int -- Int32 @@ -279,6 +345,10 @@ SET @id = 0 [TestData].[dbo].[Person_SelectByKeyLowercase] +-- SqlServer.2008 + +[TestData].[dbo].[Person_SelectAll] + -- SqlServer.2008 DECLARE @firstName NVarChar(50) -- String SET @firstName = N'' @@ -296,8 +366,6 @@ SET @lastName = N'' [TestData].[dbo].[Person_SelectListByName] -- SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 DECLARE @FirstName NVarChar(50) -- String SET @FirstName = N'' DECLARE @LastName NVarChar(50) -- String @@ -307,45 +375,53 @@ SET @MiddleName = N'' DECLARE @Gender Char(1) -- AnsiStringFixedLength SET @Gender = char(0) -[TestData].[dbo].[Person_Update] +[TestData].[dbo].[Person_Insert] -- SqlServer.2008 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[PersonSearch] +[TestData].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Person_Update] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Person_Delete] -- SqlServer.2008 -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2008 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[TableTypeTestProc] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2008 DECLARE @ReturnFullRow Bit -- Boolean @@ -354,11 +430,29 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2008 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +[TestData].[dbo].[OutRefTest] -- SqlServer.2008 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2008/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2008).sql b/SqlServer.2008/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2008).sql index 67834b246be5..b9019d2f6500 100644 --- a/SqlServer.2008/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2008).sql +++ b/SqlServer.2008/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2008).sql @@ -1,271 +1,337 @@ -- SqlServer.2008 -select @@version - --- SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 -[TestData].[dbo].[AddIssue792Record] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2008 -[TestData].[dbo].[DuplicateColumnNames] +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2008 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2008 -[TestData].[dbo].[Issue1897] +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2008 -SELECT * FROM [TestData].[dbo].[Issue1921]() - --- SqlServer.2008 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' - -[TestData].[dbo].[OutRefEnumTest] +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2008 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[PersonSearch] -- SqlServer.2008 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[Issue1897] -- SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[Person_Insert] +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Person_Insert_OutputParameter] +[TestData].[dbo].[ExecuteProcIntParameters] -- SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Person_SelectAll] +[TestData].[dbo].[ExecuteProcStringParameters] -- SqlServer.2008 DECLARE @id Int -- Int32 @@ -279,6 +345,10 @@ SET @id = 0 [TestData].[dbo].[Person_SelectByKeyLowercase] +-- SqlServer.2008 + +[TestData].[dbo].[Person_SelectAll] + -- SqlServer.2008 DECLARE @firstName NVarChar(50) -- String SET @firstName = N'' @@ -296,8 +366,6 @@ SET @lastName = N'' [TestData].[dbo].[Person_SelectListByName] -- SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 DECLARE @FirstName NVarChar(50) -- String SET @FirstName = N'' DECLARE @LastName NVarChar(50) -- String @@ -307,45 +375,53 @@ SET @MiddleName = N'' DECLARE @Gender Char(1) -- AnsiStringFixedLength SET @Gender = char(0) -[TestData].[dbo].[Person_Update] +[TestData].[dbo].[Person_Insert] -- SqlServer.2008 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[PersonSearch] +[TestData].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Person_Update] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Person_Delete] -- SqlServer.2008 -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2008 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[TableTypeTestProc] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2008 DECLARE @ReturnFullRow Bit -- Boolean @@ -354,11 +430,29 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2008 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +[TestData].[dbo].[OutRefTest] -- SqlServer.2008 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2008/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2008).sql b/SqlServer.2008/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2008).sql index 67834b246be5..b9019d2f6500 100644 --- a/SqlServer.2008/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2008).sql +++ b/SqlServer.2008/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2008).sql @@ -1,271 +1,337 @@ -- SqlServer.2008 -select @@version - --- SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 -[TestData].[dbo].[AddIssue792Record] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2008 -[TestData].[dbo].[DuplicateColumnNames] +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2008 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2008 -[TestData].[dbo].[Issue1897] +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2008 -SELECT * FROM [TestData].[dbo].[Issue1921]() - --- SqlServer.2008 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' - -[TestData].[dbo].[OutRefEnumTest] +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2008 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[PersonSearch] -- SqlServer.2008 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[Issue1897] -- SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[Person_Insert] +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Person_Insert_OutputParameter] +[TestData].[dbo].[ExecuteProcIntParameters] -- SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Person_SelectAll] +[TestData].[dbo].[ExecuteProcStringParameters] -- SqlServer.2008 DECLARE @id Int -- Int32 @@ -279,6 +345,10 @@ SET @id = 0 [TestData].[dbo].[Person_SelectByKeyLowercase] +-- SqlServer.2008 + +[TestData].[dbo].[Person_SelectAll] + -- SqlServer.2008 DECLARE @firstName NVarChar(50) -- String SET @firstName = N'' @@ -296,8 +366,6 @@ SET @lastName = N'' [TestData].[dbo].[Person_SelectListByName] -- SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 DECLARE @FirstName NVarChar(50) -- String SET @FirstName = N'' DECLARE @LastName NVarChar(50) -- String @@ -307,45 +375,53 @@ SET @MiddleName = N'' DECLARE @Gender Char(1) -- AnsiStringFixedLength SET @Gender = char(0) -[TestData].[dbo].[Person_Update] +[TestData].[dbo].[Person_Insert] -- SqlServer.2008 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[PersonSearch] +[TestData].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Person_Update] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Person_Delete] -- SqlServer.2008 -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2008 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[TableTypeTestProc] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2008 DECLARE @ReturnFullRow Bit -- Boolean @@ -354,11 +430,29 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2008 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +[TestData].[dbo].[OutRefTest] -- SqlServer.2008 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2008/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2008).sql b/SqlServer.2008/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2008).sql index c50881bf600e..e4b968a3811c 100644 --- a/SqlServer.2008/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2008).sql +++ b/SqlServer.2008/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2008).sql @@ -1,271 +1,337 @@ -- SqlServer.2008 -select @@version - --- SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 -[TestData].[dbo].[AddIssue792Record] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2008 -[TestData].[dbo].[DuplicateColumnNames] - --- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 - -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2008 -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2008 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -[TestData].[dbo].[Issue1897] +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2008 -SELECT * FROM [TestData].[dbo].[Issue1921]() +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2008 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' -[TestData].[dbo].[OutRefEnumTest] +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2008 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[PersonSearch] -- SqlServer.2008 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[Issue1897] -- SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[Person_Insert] +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Person_Insert_OutputParameter] +[TestData].[dbo].[ExecuteProcIntParameters] -- SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Person_SelectAll] +[TestData].[dbo].[ExecuteProcStringParameters] -- SqlServer.2008 DECLARE @id Int -- Int32 @@ -279,6 +345,10 @@ SET @id = 0 [TestData].[dbo].[Person_SelectByKeyLowercase] +-- SqlServer.2008 + +[TestData].[dbo].[Person_SelectAll] + -- SqlServer.2008 DECLARE @firstName NVarChar(50) -- String SET @firstName = N'' @@ -296,8 +366,6 @@ SET @lastName = N'' [TestData].[dbo].[Person_SelectListByName] -- SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 DECLARE @FirstName NVarChar(50) -- String SET @FirstName = N'' DECLARE @LastName NVarChar(50) -- String @@ -307,45 +375,53 @@ SET @MiddleName = N'' DECLARE @Gender Char(1) -- AnsiStringFixedLength SET @Gender = char(0) -[TestData].[dbo].[Person_Update] +[TestData].[dbo].[Person_Insert] -- SqlServer.2008 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[PersonSearch] +[TestData].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Person_Update] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Person_Delete] -- SqlServer.2008 -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2008 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[TableTypeTestProc] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2008 DECLARE @ReturnFullRow Bit -- Boolean @@ -354,331 +430,537 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2008 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +[TestData].[dbo].[OutRefTest] -- SqlServer.2008 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[OutRefEnumTest] RollbackTransaction -- SqlServer.2008 -select @@version - --- SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2008 -select @@version - --- SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2008/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2008).sql b/SqlServer.2008/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2008).sql index c50881bf600e..e4b968a3811c 100644 --- a/SqlServer.2008/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2008).sql +++ b/SqlServer.2008/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2008).sql @@ -1,271 +1,337 @@ -- SqlServer.2008 -select @@version - --- SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 -[TestData].[dbo].[AddIssue792Record] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2008 -[TestData].[dbo].[DuplicateColumnNames] - --- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 - -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2008 -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2008 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -[TestData].[dbo].[Issue1897] +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2008 -SELECT * FROM [TestData].[dbo].[Issue1921]() +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2008 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' -[TestData].[dbo].[OutRefEnumTest] +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2008 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[PersonSearch] -- SqlServer.2008 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[Issue1897] -- SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[Person_Insert] +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Person_Insert_OutputParameter] +[TestData].[dbo].[ExecuteProcIntParameters] -- SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Person_SelectAll] +[TestData].[dbo].[ExecuteProcStringParameters] -- SqlServer.2008 DECLARE @id Int -- Int32 @@ -279,6 +345,10 @@ SET @id = 0 [TestData].[dbo].[Person_SelectByKeyLowercase] +-- SqlServer.2008 + +[TestData].[dbo].[Person_SelectAll] + -- SqlServer.2008 DECLARE @firstName NVarChar(50) -- String SET @firstName = N'' @@ -296,8 +366,6 @@ SET @lastName = N'' [TestData].[dbo].[Person_SelectListByName] -- SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 DECLARE @FirstName NVarChar(50) -- String SET @FirstName = N'' DECLARE @LastName NVarChar(50) -- String @@ -307,45 +375,53 @@ SET @MiddleName = N'' DECLARE @Gender Char(1) -- AnsiStringFixedLength SET @Gender = char(0) -[TestData].[dbo].[Person_Update] +[TestData].[dbo].[Person_Insert] -- SqlServer.2008 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[PersonSearch] +[TestData].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Person_Update] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Person_Delete] -- SqlServer.2008 -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2008 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[TableTypeTestProc] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2008 DECLARE @ReturnFullRow Bit -- Boolean @@ -354,331 +430,537 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2008 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +[TestData].[dbo].[OutRefTest] -- SqlServer.2008 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[OutRefEnumTest] RollbackTransaction -- SqlServer.2008 -select @@version - --- SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2008 -select @@version - --- SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2008/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2008).sql b/SqlServer.2008/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2008).sql index bf9e73ca0b12..2386dc371ad6 100644 --- a/SqlServer.2008/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2008).sql +++ b/SqlServer.2008/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2008).sql @@ -7,190 +7,284 @@ FROM -- SqlServer.2008 -select @@version - --- SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 -[TestData].[dbo].[AddIssue792Record] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) + +-- SqlServer.2008 + +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2008 [TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2008 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[PersonSearch] -- SqlServer.2008 @@ -201,34 +295,58 @@ SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2008 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[OutRefEnumTest] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2008 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestData].[dbo].[ExecuteProcStringParameters] + +-- SqlServer.2008 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKey] + +-- SqlServer.2008 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2008 + +[TestData].[dbo].[Person_SelectAll] -- SqlServer.2008 DECLARE @firstName NVarChar(50) -- String @@ -236,13 +354,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +[TestData].[dbo].[Person_SelectByName] -- SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[Person_SelectListByName] -- SqlServer.2008 DECLARE @FirstName NVarChar(50) -- String @@ -270,38 +390,6 @@ SET @PersonID = 0 [TestData].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2008 - -[TestData].[dbo].[Person_SelectAll] - --- SqlServer.2008 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKey] - --- SqlServer.2008 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectByName] - --- SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectListByName] - -- SqlServer.2008 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -317,47 +405,53 @@ SET @Gender = char(0) [TestData].[dbo].[Person_Update] -- SqlServer.2008 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[PersonSearch] +[TestData].[dbo].[Person_Delete] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2008 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[VariableResults] -- SqlServer.2008 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[dbo].[TableTypeTestProc] +[TestData].[dbo].[OutRefTest] -- SqlServer.2008 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[dbo].[VariableResults] +[TestData].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2008/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2008).sql b/SqlServer.2008/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2008).sql index bf9e73ca0b12..2386dc371ad6 100644 --- a/SqlServer.2008/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2008).sql +++ b/SqlServer.2008/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2008).sql @@ -7,190 +7,284 @@ FROM -- SqlServer.2008 -select @@version - --- SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 -[TestData].[dbo].[AddIssue792Record] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) + +-- SqlServer.2008 + +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2008 [TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2008 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[PersonSearch] -- SqlServer.2008 @@ -201,34 +295,58 @@ SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2008 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[OutRefEnumTest] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2008 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestData].[dbo].[ExecuteProcStringParameters] + +-- SqlServer.2008 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKey] + +-- SqlServer.2008 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2008 + +[TestData].[dbo].[Person_SelectAll] -- SqlServer.2008 DECLARE @firstName NVarChar(50) -- String @@ -236,13 +354,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +[TestData].[dbo].[Person_SelectByName] -- SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[Person_SelectListByName] -- SqlServer.2008 DECLARE @FirstName NVarChar(50) -- String @@ -270,38 +390,6 @@ SET @PersonID = 0 [TestData].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2008 - -[TestData].[dbo].[Person_SelectAll] - --- SqlServer.2008 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKey] - --- SqlServer.2008 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectByName] - --- SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectListByName] - -- SqlServer.2008 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -317,47 +405,53 @@ SET @Gender = char(0) [TestData].[dbo].[Person_Update] -- SqlServer.2008 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[PersonSearch] +[TestData].[dbo].[Person_Delete] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2008 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[VariableResults] -- SqlServer.2008 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[dbo].[TableTypeTestProc] +[TestData].[dbo].[OutRefTest] -- SqlServer.2008 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[dbo].[VariableResults] +[TestData].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2008/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2008).sql b/SqlServer.2008/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2008).sql index 67834b246be5..b9019d2f6500 100644 --- a/SqlServer.2008/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2008).sql +++ b/SqlServer.2008/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2008).sql @@ -1,271 +1,337 @@ -- SqlServer.2008 -select @@version - --- SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 -[TestData].[dbo].[AddIssue792Record] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2008 -[TestData].[dbo].[DuplicateColumnNames] +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2008 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2008 -[TestData].[dbo].[Issue1897] +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2008 -SELECT * FROM [TestData].[dbo].[Issue1921]() - --- SqlServer.2008 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' - -[TestData].[dbo].[OutRefEnumTest] +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2008 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[PersonSearch] -- SqlServer.2008 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[Issue1897] -- SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[Person_Insert] +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Person_Insert_OutputParameter] +[TestData].[dbo].[ExecuteProcIntParameters] -- SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Person_SelectAll] +[TestData].[dbo].[ExecuteProcStringParameters] -- SqlServer.2008 DECLARE @id Int -- Int32 @@ -279,6 +345,10 @@ SET @id = 0 [TestData].[dbo].[Person_SelectByKeyLowercase] +-- SqlServer.2008 + +[TestData].[dbo].[Person_SelectAll] + -- SqlServer.2008 DECLARE @firstName NVarChar(50) -- String SET @firstName = N'' @@ -296,8 +366,6 @@ SET @lastName = N'' [TestData].[dbo].[Person_SelectListByName] -- SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 DECLARE @FirstName NVarChar(50) -- String SET @FirstName = N'' DECLARE @LastName NVarChar(50) -- String @@ -307,45 +375,53 @@ SET @MiddleName = N'' DECLARE @Gender Char(1) -- AnsiStringFixedLength SET @Gender = char(0) -[TestData].[dbo].[Person_Update] +[TestData].[dbo].[Person_Insert] -- SqlServer.2008 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[PersonSearch] +[TestData].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Person_Update] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Person_Delete] -- SqlServer.2008 -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2008 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[TableTypeTestProc] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2008 DECLARE @ReturnFullRow Bit -- Boolean @@ -354,11 +430,29 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2008 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +[TestData].[dbo].[OutRefTest] -- SqlServer.2008 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2008/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2008).sql b/SqlServer.2008/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2008).sql index 67834b246be5..b9019d2f6500 100644 --- a/SqlServer.2008/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2008).sql +++ b/SqlServer.2008/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2008).sql @@ -1,271 +1,337 @@ -- SqlServer.2008 -select @@version - --- SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 -[TestData].[dbo].[AddIssue792Record] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2008 -[TestData].[dbo].[DuplicateColumnNames] +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2008 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2008 -[TestData].[dbo].[Issue1897] +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2008 -SELECT * FROM [TestData].[dbo].[Issue1921]() - --- SqlServer.2008 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' - -[TestData].[dbo].[OutRefEnumTest] +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2008 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[PersonSearch] -- SqlServer.2008 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[Issue1897] -- SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[Person_Insert] +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Person_Insert_OutputParameter] +[TestData].[dbo].[ExecuteProcIntParameters] -- SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Person_SelectAll] +[TestData].[dbo].[ExecuteProcStringParameters] -- SqlServer.2008 DECLARE @id Int -- Int32 @@ -279,6 +345,10 @@ SET @id = 0 [TestData].[dbo].[Person_SelectByKeyLowercase] +-- SqlServer.2008 + +[TestData].[dbo].[Person_SelectAll] + -- SqlServer.2008 DECLARE @firstName NVarChar(50) -- String SET @firstName = N'' @@ -296,8 +366,6 @@ SET @lastName = N'' [TestData].[dbo].[Person_SelectListByName] -- SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 DECLARE @FirstName NVarChar(50) -- String SET @FirstName = N'' DECLARE @LastName NVarChar(50) -- String @@ -307,45 +375,53 @@ SET @MiddleName = N'' DECLARE @Gender Char(1) -- AnsiStringFixedLength SET @Gender = char(0) -[TestData].[dbo].[Person_Update] +[TestData].[dbo].[Person_Insert] -- SqlServer.2008 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[PersonSearch] +[TestData].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Person_Update] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Person_Delete] -- SqlServer.2008 -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2008 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[TableTypeTestProc] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2008 DECLARE @ReturnFullRow Bit -- Boolean @@ -354,11 +430,29 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2008 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +[TestData].[dbo].[OutRefTest] -- SqlServer.2008 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2008/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2008).sql b/SqlServer.2008/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2008).sql index 67834b246be5..b9019d2f6500 100644 --- a/SqlServer.2008/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2008).sql +++ b/SqlServer.2008/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2008).sql @@ -1,271 +1,337 @@ -- SqlServer.2008 -select @@version - --- SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + CASE + WHEN [t1].[Type_1] = N'V' THEN 1 + ELSE 0 + END, + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2008 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(CASE + WHEN [c_1].[user_type_id] = 255 THEN [c_1].[user_type_id] + ELSE [c_1].[system_type_id] + END), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + CASE + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + CASE + WHEN [c_1].[is_computed] = 1 THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2008 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 -[TestData].[dbo].[AddIssue792Record] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2008 -[TestData].[dbo].[DuplicateColumnNames] +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2008 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2008 -[TestData].[dbo].[Issue1897] +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2008 -SELECT * FROM [TestData].[dbo].[Issue1921]() - --- SqlServer.2008 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' - -[TestData].[dbo].[OutRefEnumTest] +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2008 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[PersonSearch] -- SqlServer.2008 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[Issue1897] -- SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[Person_Insert] +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2008 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Person_Insert_OutputParameter] +[TestData].[dbo].[ExecuteProcIntParameters] -- SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Person_SelectAll] +[TestData].[dbo].[ExecuteProcStringParameters] -- SqlServer.2008 DECLARE @id Int -- Int32 @@ -279,6 +345,10 @@ SET @id = 0 [TestData].[dbo].[Person_SelectByKeyLowercase] +-- SqlServer.2008 + +[TestData].[dbo].[Person_SelectAll] + -- SqlServer.2008 DECLARE @firstName NVarChar(50) -- String SET @firstName = N'' @@ -296,8 +366,6 @@ SET @lastName = N'' [TestData].[dbo].[Person_SelectListByName] -- SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 DECLARE @FirstName NVarChar(50) -- String SET @FirstName = N'' DECLARE @LastName NVarChar(50) -- String @@ -307,45 +375,53 @@ SET @MiddleName = N'' DECLARE @Gender Char(1) -- AnsiStringFixedLength SET @Gender = char(0) -[TestData].[dbo].[Person_Update] +[TestData].[dbo].[Person_Insert] -- SqlServer.2008 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[PersonSearch] +[TestData].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Person_Update] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Person_Delete] -- SqlServer.2008 -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2008 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[TableTypeTestProc] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2008 DECLARE @ReturnFullRow Bit -- Boolean @@ -354,11 +430,29 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2008 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +[TestData].[dbo].[OutRefTest] -- SqlServer.2008 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[OutRefEnumTest] RollbackTransaction diff --git a/SqlServer.2008/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2008).sql b/SqlServer.2008/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2008).sql index 4041f01eb5fe..30154fc0c703 100644 --- a/SqlServer.2008/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2008).sql +++ b/SqlServer.2008/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2008).sql @@ -7,9 +7,5 @@ FROM -- SqlServer.2008 -select @@version - --- SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() diff --git a/SqlServer.2008/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2008).sql b/SqlServer.2008/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2008).sql index 8b317e69857f..9096c739172c 100644 --- a/SqlServer.2008/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2008).sql +++ b/SqlServer.2008/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2008).sql @@ -14,85 +14,130 @@ FROM -- SqlServer.2008 -select @@version - --- SqlServer.2008 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + CASE + WHEN [t1].[Name] = N'dbo' THEN 1 + ELSE 0 + END FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(CASE + WHEN [t1].[UserTypeId] = 255 THEN [t1].[UserTypeId] + ELSE [t1].[SystemTypeId] + END), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + CASE + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN NULL + ELSE ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + END, + CASE + WHEN [t1].[ParameterId] = 0 OR [t1].[is_output] = 1 THEN 1 + ELSE 0 + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[databaseName] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_4] + ELSE NULL + END, + CASE + WHEN [t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL THEN [t1].[Name_2] + ELSE NULL + END, + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2008 -[TestData].[dbo].[AddIssue792Record] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) + +-- SqlServer.2008 + +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2008 [TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2008 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[PersonSearch] -- SqlServer.2008 @@ -103,34 +148,58 @@ SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2008 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[OutRefEnumTest] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2008 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2008 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestData].[dbo].[ExecuteProcStringParameters] + +-- SqlServer.2008 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKey] + +-- SqlServer.2008 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2008 + +[TestData].[dbo].[Person_SelectAll] -- SqlServer.2008 DECLARE @firstName NVarChar(50) -- String @@ -138,13 +207,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +[TestData].[dbo].[Person_SelectByName] -- SqlServer.2008 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[Person_SelectListByName] -- SqlServer.2008 DECLARE @FirstName NVarChar(50) -- String @@ -172,38 +243,6 @@ SET @PersonID = 0 [TestData].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2008 - -[TestData].[dbo].[Person_SelectAll] - --- SqlServer.2008 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKey] - --- SqlServer.2008 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectByName] - --- SqlServer.2008 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectListByName] - -- SqlServer.2008 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -219,48 +258,54 @@ SET @Gender = char(0) [TestData].[dbo].[Person_Update] -- SqlServer.2008 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[PersonSearch] +[TestData].[dbo].[Person_Delete] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2008 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2008 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[VariableResults] -- SqlServer.2008 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[dbo].[TableTypeTestProc] +[TestData].[dbo].[OutRefTest] -- SqlServer.2008 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[dbo].[VariableResults] +[TestData].[dbo].[OutRefEnumTest] RollbackTransaction -- SqlServer.2008 diff --git a/SqlServer.2012.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2012.MS).sql b/SqlServer.2012.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2012.MS).sql index 246cd7bf71b3..729a5db625dc 100644 --- a/SqlServer.2012.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2012.MS).sql +++ b/SqlServer.2012.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2012.MS).sql @@ -1,124 +1,144 @@ -- SqlServer.2012.MS SqlServer.2012 -select @@version - --- SqlServer.2012.MS SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -126,7 +146,7 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -134,9 +154,9 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -158,31 +178,31 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -190,53 +210,57 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -258,28 +282,28 @@ SET @table = NULL -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - -- SqlServer.2012.MS SqlServer.2012 SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2012.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2012.MS).sql b/SqlServer.2012.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2012.MS).sql index 01e8a3f4bea9..97147d05c849 100644 --- a/SqlServer.2012.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2012.MS).sql +++ b/SqlServer.2012.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2012.MS).sql @@ -1,229 +1,283 @@ -- SqlServer.2012.MS SqlServer.2012 -select @@version - --- SqlServer.2012.MS SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,28 +421,28 @@ SET @table = NULL -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - -- SqlServer.2012.MS SqlServer.2012 SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2012.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2012.MS).sql b/SqlServer.2012.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2012.MS).sql index 01e8a3f4bea9..97147d05c849 100644 --- a/SqlServer.2012.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2012.MS).sql +++ b/SqlServer.2012.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2012.MS).sql @@ -1,229 +1,283 @@ -- SqlServer.2012.MS SqlServer.2012 -select @@version - --- SqlServer.2012.MS SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,28 +421,28 @@ SET @table = NULL -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - -- SqlServer.2012.MS SqlServer.2012 SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2012.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2012.MS).sql b/SqlServer.2012.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2012.MS).sql index 01e8a3f4bea9..97147d05c849 100644 --- a/SqlServer.2012.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2012.MS).sql +++ b/SqlServer.2012.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2012.MS).sql @@ -1,229 +1,283 @@ -- SqlServer.2012.MS SqlServer.2012 -select @@version - --- SqlServer.2012.MS SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,28 +421,28 @@ SET @table = NULL -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - -- SqlServer.2012.MS SqlServer.2012 SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2012.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2012.MS).sql b/SqlServer.2012.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2012.MS).sql index db192a17c8dd..2251457cf1ea 100644 --- a/SqlServer.2012.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2012.MS).sql +++ b/SqlServer.2012.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2012.MS).sql @@ -1,229 +1,283 @@ -- SqlServer.2012.MS SqlServer.2012 -select @@version - --- SqlServer.2012.MS SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,348 +421,464 @@ SET @table = NULL -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - -- SqlServer.2012.MS SqlServer.2012 SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -RollbackTransaction -- SqlServer.2012.MS SqlServer.2012 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -select @@version +[TestDataMS].[dbo].[PersonSearch] +RollbackTransaction -- SqlServer.2012.MS SqlServer.2012 SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2012.MS SqlServer.2012 -select @@version - --- SqlServer.2012.MS SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2012.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2012.MS).sql b/SqlServer.2012.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2012.MS).sql index db192a17c8dd..2251457cf1ea 100644 --- a/SqlServer.2012.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2012.MS).sql +++ b/SqlServer.2012.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2012.MS).sql @@ -1,229 +1,283 @@ -- SqlServer.2012.MS SqlServer.2012 -select @@version - --- SqlServer.2012.MS SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,348 +421,464 @@ SET @table = NULL -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - -- SqlServer.2012.MS SqlServer.2012 SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -RollbackTransaction -- SqlServer.2012.MS SqlServer.2012 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -select @@version +[TestDataMS].[dbo].[PersonSearch] +RollbackTransaction -- SqlServer.2012.MS SqlServer.2012 SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2012.MS SqlServer.2012 -select @@version - --- SqlServer.2012.MS SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2012.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2012.MS).sql b/SqlServer.2012.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2012.MS).sql index 66f1735d589c..580a7046649e 100644 --- a/SqlServer.2012.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2012.MS).sql +++ b/SqlServer.2012.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2012.MS).sql @@ -7,230 +7,284 @@ FROM -- SqlServer.2012.MS SqlServer.2012 -select @@version - --- SqlServer.2012.MS SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +292,7 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +300,9 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +324,31 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +356,57 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,16 +428,16 @@ SET @table = NULL -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMS].[dbo].[VariableResults] +[TestDataMS].[dbo].[PersonSearch] RollbackTransaction diff --git a/SqlServer.2012.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2012.MS).sql b/SqlServer.2012.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2012.MS).sql index 6b28c4f2ada9..d84d76fc9e9d 100644 --- a/SqlServer.2012.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2012.MS).sql +++ b/SqlServer.2012.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2012.MS).sql @@ -1,122 +1,142 @@ -- SqlServer.2012.MS SqlServer.2012 -select @@version - --- SqlServer.2012.MS SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 -[TestDataMS].[dbo].[AddIssue792Record] +[TestDataMS].[dbo].[Issue1897] -- SqlServer.2012.MS SqlServer.2012 -[TestDataMS].[dbo].[DuplicateColumnNames] +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2012.MS SqlServer.2012 DECLARE @input Int -- Int32 SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2012.MS SqlServer.2012 DECLARE @input Int -- Int32 SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 - -[TestDataMS].[dbo].[ExecuteProcStringParameters] - --- SqlServer.2012.MS SqlServer.2012 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2012.MS SqlServer.2012 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Issue1897] +[TestDataMS].[dbo].[ExecuteProcIntParameters] -- SqlServer.2012.MS SqlServer.2012 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() +[TestDataMS].[dbo].[ExecuteProcStringParameters] -- SqlServer.2012.MS SqlServer.2012 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestDataMS].[dbo].[OutRefEnumTest] +[TestDataMS].[dbo].[Person_SelectByKey] -- SqlServer.2012.MS SqlServer.2012 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[Person_SelectByKeyLowercase] -- SqlServer.2012.MS SqlServer.2012 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[Person_SelectAll] -- SqlServer.2012.MS SqlServer.2012 DECLARE @firstName NVarChar(50) -- String @@ -124,13 +144,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +[TestDataMS].[dbo].[Person_SelectByName] -- SqlServer.2012.MS SqlServer.2012 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2012.MS SqlServer.2012 DECLARE @FirstName NVarChar(50) -- String @@ -159,20 +181,28 @@ SET @PersonID = 0 [TestDataMS].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2012.MS SqlServer.2012 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestDataMS].[dbo].[Person_SelectAll] +[TestDataMS].[dbo].[Person_Update] -- SqlServer.2012.MS SqlServer.2012 -DECLARE @id Int -- Int32 -SET @id = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[Person_SelectByKey] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2012.MS SqlServer.2012 -DECLARE @id Int -- Int32 -SET @id = 0 -[TestDataMS].[dbo].[Person_SelectByKeyLowercase] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2012.MS SqlServer.2012 DECLARE @firstName NVarChar(50) -- String @@ -180,61 +210,55 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Person_SelectByName] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2012.MS SqlServer.2012 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[Person_SelectListByName] +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2012.MS SqlServer.2012 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[dbo].[Person_Update] +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2012.MS SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[dbo].[PersonSearch] +[TestDataMS].[dbo].[OutRefEnumTest] -- SqlServer.2012.MS SqlServer.2012 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 -[TestDataMS].[dbo].[QueryProcMultipleParameters] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2012.MS SqlServer.2012 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2012.MS SqlServer.2012 -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[DuplicateColumnNames] + +-- SqlServer.2012.MS SqlServer.2012 + +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2012.MS SqlServer.2012 DECLARE @table [dbo].[TestTableType] -- Structured -- Object @@ -243,141 +267,161 @@ SET @table = NULL [TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2012.MS SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2012.MS SqlServer.2012 SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2012.MS SqlServer.2012 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[PersonSearch] RollbackTransaction -- SqlServer.2012.MS SqlServer.2012 -select @@version - --- SqlServer.2012.MS SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -385,7 +429,7 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -393,9 +437,9 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -417,31 +461,31 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -449,53 +493,57 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -517,28 +565,28 @@ SET @table = NULL -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - -- SqlServer.2012.MS SqlServer.2012 SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2012.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2012.MS).sql b/SqlServer.2012.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2012.MS).sql index 66f1735d589c..580a7046649e 100644 --- a/SqlServer.2012.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2012.MS).sql +++ b/SqlServer.2012.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2012.MS).sql @@ -7,230 +7,284 @@ FROM -- SqlServer.2012.MS SqlServer.2012 -select @@version - --- SqlServer.2012.MS SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +292,7 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +300,9 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +324,31 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +356,57 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,16 +428,16 @@ SET @table = NULL -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMS].[dbo].[VariableResults] +[TestDataMS].[dbo].[PersonSearch] RollbackTransaction diff --git a/SqlServer.2012.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2012.MS).sql b/SqlServer.2012.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2012.MS).sql index 01e8a3f4bea9..97147d05c849 100644 --- a/SqlServer.2012.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2012.MS).sql +++ b/SqlServer.2012.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2012.MS).sql @@ -1,229 +1,283 @@ -- SqlServer.2012.MS SqlServer.2012 -select @@version - --- SqlServer.2012.MS SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,28 +421,28 @@ SET @table = NULL -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - -- SqlServer.2012.MS SqlServer.2012 SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2012.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2012.MS).sql b/SqlServer.2012.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2012.MS).sql index 01e8a3f4bea9..97147d05c849 100644 --- a/SqlServer.2012.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2012.MS).sql +++ b/SqlServer.2012.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2012.MS).sql @@ -1,229 +1,283 @@ -- SqlServer.2012.MS SqlServer.2012 -select @@version - --- SqlServer.2012.MS SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,28 +421,28 @@ SET @table = NULL -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - -- SqlServer.2012.MS SqlServer.2012 SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2012.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2012.MS).sql b/SqlServer.2012.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2012.MS).sql index 01e8a3f4bea9..97147d05c849 100644 --- a/SqlServer.2012.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2012.MS).sql +++ b/SqlServer.2012.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2012.MS).sql @@ -1,229 +1,283 @@ -- SqlServer.2012.MS SqlServer.2012 -select @@version - --- SqlServer.2012.MS SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012.MS SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,28 +421,28 @@ SET @table = NULL -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - -- SqlServer.2012.MS SqlServer.2012 SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2012.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2012.MS).sql b/SqlServer.2012.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2012.MS).sql index a78a728c27a0..6a385201098b 100644 --- a/SqlServer.2012.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2012.MS).sql +++ b/SqlServer.2012.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2012.MS).sql @@ -7,9 +7,5 @@ FROM -- SqlServer.2012.MS SqlServer.2012 -select @@version - --- SqlServer.2012.MS SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() diff --git a/SqlServer.2012.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2012.MS).sql b/SqlServer.2012.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2012.MS).sql index 689d34d9f7ab..6398bd9a888f 100644 --- a/SqlServer.2012.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2012.MS).sql +++ b/SqlServer.2012.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2012.MS).sql @@ -14,125 +14,145 @@ FROM -- SqlServer.2012.MS SqlServer.2012 -select @@version - --- SqlServer.2012.MS SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012.MS SqlServer.2012 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -140,7 +160,7 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -148,9 +168,9 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -172,31 +192,31 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -204,53 +224,57 @@ sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012.MS SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -272,17 +296,17 @@ SET @table = NULL -- SqlServer.2012.MS SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2012.MS SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMS].[dbo].[VariableResults] +[TestDataMS].[dbo].[PersonSearch] RollbackTransaction -- SqlServer.2012.MS SqlServer.2012 diff --git a/SqlServer.2012/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2012).sql b/SqlServer.2012/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2012).sql index bdc19f8b567d..a5c0caf8545b 100644 --- a/SqlServer.2012/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2012).sql +++ b/SqlServer.2012/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2012).sql @@ -1,124 +1,144 @@ -- SqlServer.2012 -select @@version - --- SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -126,7 +146,7 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -134,9 +154,9 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -158,31 +178,31 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -190,53 +210,57 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -258,28 +282,28 @@ SET @table = NULL -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - -- SqlServer.2012 SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2012 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2012/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2012).sql b/SqlServer.2012/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2012).sql index 123861a45504..a6a6ed55b5a5 100644 --- a/SqlServer.2012/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2012).sql +++ b/SqlServer.2012/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2012).sql @@ -1,229 +1,283 @@ -- SqlServer.2012 -select @@version - --- SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,28 +421,28 @@ SET @table = NULL -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - -- SqlServer.2012 SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2012 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2012/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2012).sql b/SqlServer.2012/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2012).sql index 123861a45504..a6a6ed55b5a5 100644 --- a/SqlServer.2012/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2012).sql +++ b/SqlServer.2012/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2012).sql @@ -1,229 +1,283 @@ -- SqlServer.2012 -select @@version - --- SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,28 +421,28 @@ SET @table = NULL -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - -- SqlServer.2012 SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2012 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2012/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2012).sql b/SqlServer.2012/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2012).sql index 123861a45504..a6a6ed55b5a5 100644 --- a/SqlServer.2012/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2012).sql +++ b/SqlServer.2012/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2012).sql @@ -1,229 +1,283 @@ -- SqlServer.2012 -select @@version - --- SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,28 +421,28 @@ SET @table = NULL -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - -- SqlServer.2012 SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2012 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2012/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2012).sql b/SqlServer.2012/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2012).sql index dc01ad73bdd4..2e04e1fb1d37 100644 --- a/SqlServer.2012/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2012).sql +++ b/SqlServer.2012/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2012).sql @@ -1,229 +1,283 @@ -- SqlServer.2012 -select @@version - --- SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,348 +421,464 @@ SET @table = NULL -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - -- SqlServer.2012 SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -RollbackTransaction -- SqlServer.2012 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -select @@version +[TestData].[dbo].[PersonSearch] +RollbackTransaction -- SqlServer.2012 SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2012 -select @@version - --- SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2012/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2012).sql b/SqlServer.2012/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2012).sql index dc01ad73bdd4..2e04e1fb1d37 100644 --- a/SqlServer.2012/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2012).sql +++ b/SqlServer.2012/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2012).sql @@ -1,229 +1,283 @@ -- SqlServer.2012 -select @@version - --- SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,348 +421,464 @@ SET @table = NULL -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - -- SqlServer.2012 SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -RollbackTransaction -- SqlServer.2012 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -select @@version +[TestData].[dbo].[PersonSearch] +RollbackTransaction -- SqlServer.2012 SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2012 -select @@version - --- SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2012/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2012).sql b/SqlServer.2012/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2012).sql index eb353ca5b3e1..1bae1bc44b03 100644 --- a/SqlServer.2012/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2012).sql +++ b/SqlServer.2012/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2012).sql @@ -7,230 +7,284 @@ FROM -- SqlServer.2012 -select @@version - --- SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +292,7 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +300,9 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +324,31 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +356,57 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,16 +428,16 @@ SET @table = NULL -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestData].[dbo].[VariableResults] +[TestData].[dbo].[PersonSearch] RollbackTransaction diff --git a/SqlServer.2012/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2012).sql b/SqlServer.2012/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2012).sql index 48b891d4a11d..43935db7a392 100644 --- a/SqlServer.2012/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2012).sql +++ b/SqlServer.2012/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2012).sql @@ -1,122 +1,142 @@ -- SqlServer.2012 -select @@version - --- SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 -[TestData].[dbo].[AddIssue792Record] +[TestData].[dbo].[Issue1897] -- SqlServer.2012 -[TestData].[dbo].[DuplicateColumnNames] +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2012 DECLARE @input Int -- Int32 SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2012 DECLARE @input Int -- Int32 SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 - -[TestData].[dbo].[ExecuteProcStringParameters] - --- SqlServer.2012 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2012 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Issue1897] +[TestData].[dbo].[ExecuteProcIntParameters] -- SqlServer.2012 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -SELECT * FROM [TestData].[dbo].[Issue1921]() +[TestData].[dbo].[ExecuteProcStringParameters] -- SqlServer.2012 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestData].[dbo].[OutRefEnumTest] +[TestData].[dbo].[Person_SelectByKey] -- SqlServer.2012 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[Person_SelectByKeyLowercase] -- SqlServer.2012 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[Person_SelectAll] -- SqlServer.2012 DECLARE @firstName NVarChar(50) -- String @@ -124,13 +144,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +[TestData].[dbo].[Person_SelectByName] -- SqlServer.2012 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[Person_SelectListByName] -- SqlServer.2012 DECLARE @FirstName NVarChar(50) -- String @@ -159,20 +181,28 @@ SET @PersonID = 0 [TestData].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2012 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestData].[dbo].[Person_SelectAll] +[TestData].[dbo].[Person_Update] -- SqlServer.2012 -DECLARE @id Int -- Int32 -SET @id = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[Person_SelectByKey] +[TestData].[dbo].[Person_Delete] -- SqlServer.2012 -DECLARE @id Int -- Int32 -SET @id = 0 -[TestData].[dbo].[Person_SelectByKeyLowercase] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2012 DECLARE @firstName NVarChar(50) -- String @@ -180,61 +210,55 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestData].[dbo].[Person_SelectByName] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2012 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -[TestData].[dbo].[Person_SelectListByName] +[TestData].[dbo].[VariableResults] -- SqlServer.2012 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[dbo].[Person_Update] +[TestData].[dbo].[OutRefTest] -- SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[dbo].[PersonSearch] +[TestData].[dbo].[OutRefEnumTest] -- SqlServer.2012 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 -[TestData].[dbo].[QueryProcMultipleParameters] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2012 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2012 -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[DuplicateColumnNames] + +-- SqlServer.2012 + +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2012 DECLARE @table [dbo].[TestTableType] -- Structured -- Object @@ -243,141 +267,161 @@ SET @table = NULL [TestData].[dbo].[TableTypeTestProc] -- SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2012 SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2012 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[PersonSearch] RollbackTransaction -- SqlServer.2012 -select @@version - --- SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -385,7 +429,7 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -393,9 +437,9 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -417,31 +461,31 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -449,53 +493,57 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -517,28 +565,28 @@ SET @table = NULL -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - -- SqlServer.2012 SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2012 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2012/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2012).sql b/SqlServer.2012/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2012).sql index eb353ca5b3e1..1bae1bc44b03 100644 --- a/SqlServer.2012/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2012).sql +++ b/SqlServer.2012/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2012).sql @@ -7,230 +7,284 @@ FROM -- SqlServer.2012 -select @@version - --- SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +292,7 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +300,9 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +324,31 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +356,57 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,16 +428,16 @@ SET @table = NULL -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestData].[dbo].[VariableResults] +[TestData].[dbo].[PersonSearch] RollbackTransaction diff --git a/SqlServer.2012/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2012).sql b/SqlServer.2012/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2012).sql index 123861a45504..a6a6ed55b5a5 100644 --- a/SqlServer.2012/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2012).sql +++ b/SqlServer.2012/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2012).sql @@ -1,229 +1,283 @@ -- SqlServer.2012 -select @@version - --- SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,28 +421,28 @@ SET @table = NULL -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - -- SqlServer.2012 SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2012 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2012/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2012).sql b/SqlServer.2012/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2012).sql index 123861a45504..a6a6ed55b5a5 100644 --- a/SqlServer.2012/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2012).sql +++ b/SqlServer.2012/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2012).sql @@ -1,229 +1,283 @@ -- SqlServer.2012 -select @@version - --- SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,28 +421,28 @@ SET @table = NULL -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - -- SqlServer.2012 SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2012 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2012/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2012).sql b/SqlServer.2012/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2012).sql index 123861a45504..a6a6ed55b5a5 100644 --- a/SqlServer.2012/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2012).sql +++ b/SqlServer.2012/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2012).sql @@ -1,229 +1,283 @@ -- SqlServer.2012 -select @@version - --- SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2012 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2012 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,28 +421,28 @@ SET @table = NULL -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - -- SqlServer.2012 SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2012 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2012/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2012).sql b/SqlServer.2012/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2012).sql index 48a015cf0697..ae3ab0d69dba 100644 --- a/SqlServer.2012/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2012).sql +++ b/SqlServer.2012/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2012).sql @@ -7,9 +7,5 @@ FROM -- SqlServer.2012 -select @@version - --- SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() diff --git a/SqlServer.2012/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2012).sql b/SqlServer.2012/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2012).sql index 7d9197a9012b..6d838a48eeea 100644 --- a/SqlServer.2012/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2012).sql +++ b/SqlServer.2012/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2012).sql @@ -14,125 +14,145 @@ FROM -- SqlServer.2012 -select @@version - --- SqlServer.2012 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2012 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2012 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -140,7 +160,7 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -148,9 +168,9 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -172,31 +192,31 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -204,53 +224,57 @@ sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2012 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2012 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -272,17 +296,17 @@ SET @table = NULL -- SqlServer.2012 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2012 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestData].[dbo].[VariableResults] +[TestData].[dbo].[PersonSearch] RollbackTransaction -- SqlServer.2012 diff --git a/SqlServer.2014.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2014.MS).sql b/SqlServer.2014.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2014.MS).sql index 8a0603ee477b..69b23d8bd478 100644 --- a/SqlServer.2014.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2014.MS).sql +++ b/SqlServer.2014.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2014.MS).sql @@ -1,124 +1,144 @@ -- SqlServer.2014.MS SqlServer.2014 -select @@version - --- SqlServer.2014.MS SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -126,7 +146,7 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -134,9 +154,9 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -158,31 +178,31 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -190,53 +210,57 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -258,28 +282,28 @@ SET @table = NULL -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - -- SqlServer.2014.MS SqlServer.2014 SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2014.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2014.MS).sql b/SqlServer.2014.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2014.MS).sql index 78f6429ab0b0..ab3b9d6ba78d 100644 --- a/SqlServer.2014.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2014.MS).sql +++ b/SqlServer.2014.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2014.MS).sql @@ -1,229 +1,283 @@ -- SqlServer.2014.MS SqlServer.2014 -select @@version - --- SqlServer.2014.MS SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,28 +421,28 @@ SET @table = NULL -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - -- SqlServer.2014.MS SqlServer.2014 SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2014.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2014.MS).sql b/SqlServer.2014.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2014.MS).sql index 78f6429ab0b0..ab3b9d6ba78d 100644 --- a/SqlServer.2014.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2014.MS).sql +++ b/SqlServer.2014.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2014.MS).sql @@ -1,229 +1,283 @@ -- SqlServer.2014.MS SqlServer.2014 -select @@version - --- SqlServer.2014.MS SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,28 +421,28 @@ SET @table = NULL -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - -- SqlServer.2014.MS SqlServer.2014 SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2014.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2014.MS).sql b/SqlServer.2014.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2014.MS).sql index 78f6429ab0b0..ab3b9d6ba78d 100644 --- a/SqlServer.2014.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2014.MS).sql +++ b/SqlServer.2014.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2014.MS).sql @@ -1,229 +1,283 @@ -- SqlServer.2014.MS SqlServer.2014 -select @@version - --- SqlServer.2014.MS SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,28 +421,28 @@ SET @table = NULL -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - -- SqlServer.2014.MS SqlServer.2014 SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2014.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2014.MS).sql b/SqlServer.2014.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2014.MS).sql index 7e8e268abb82..14f1184cc79b 100644 --- a/SqlServer.2014.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2014.MS).sql +++ b/SqlServer.2014.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2014.MS).sql @@ -1,229 +1,283 @@ -- SqlServer.2014.MS SqlServer.2014 -select @@version - --- SqlServer.2014.MS SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,348 +421,464 @@ SET @table = NULL -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - -- SqlServer.2014.MS SqlServer.2014 SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -RollbackTransaction -- SqlServer.2014.MS SqlServer.2014 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -select @@version +[TestDataMS].[dbo].[PersonSearch] +RollbackTransaction -- SqlServer.2014.MS SqlServer.2014 SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2014.MS SqlServer.2014 -select @@version - --- SqlServer.2014.MS SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2014.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2014.MS).sql b/SqlServer.2014.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2014.MS).sql index 7e8e268abb82..14f1184cc79b 100644 --- a/SqlServer.2014.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2014.MS).sql +++ b/SqlServer.2014.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2014.MS).sql @@ -1,229 +1,283 @@ -- SqlServer.2014.MS SqlServer.2014 -select @@version - --- SqlServer.2014.MS SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,348 +421,464 @@ SET @table = NULL -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - -- SqlServer.2014.MS SqlServer.2014 SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -RollbackTransaction -- SqlServer.2014.MS SqlServer.2014 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -select @@version +[TestDataMS].[dbo].[PersonSearch] +RollbackTransaction -- SqlServer.2014.MS SqlServer.2014 SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2014.MS SqlServer.2014 -select @@version - --- SqlServer.2014.MS SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2014.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2014.MS).sql b/SqlServer.2014.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2014.MS).sql index a6d975e70486..2085c0409a66 100644 --- a/SqlServer.2014.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2014.MS).sql +++ b/SqlServer.2014.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2014.MS).sql @@ -7,230 +7,284 @@ FROM -- SqlServer.2014.MS SqlServer.2014 -select @@version - --- SqlServer.2014.MS SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +292,7 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +300,9 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +324,31 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +356,57 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,16 +428,16 @@ SET @table = NULL -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMS].[dbo].[VariableResults] +[TestDataMS].[dbo].[PersonSearch] RollbackTransaction diff --git a/SqlServer.2014.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2014.MS).sql b/SqlServer.2014.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2014.MS).sql index 3e79e70ac2a2..f80f89a50a20 100644 --- a/SqlServer.2014.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2014.MS).sql +++ b/SqlServer.2014.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2014.MS).sql @@ -1,122 +1,142 @@ -- SqlServer.2014.MS SqlServer.2014 -select @@version - --- SqlServer.2014.MS SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 -[TestDataMS].[dbo].[AddIssue792Record] +[TestDataMS].[dbo].[Issue1897] -- SqlServer.2014.MS SqlServer.2014 -[TestDataMS].[dbo].[DuplicateColumnNames] +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2014.MS SqlServer.2014 DECLARE @input Int -- Int32 SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2014.MS SqlServer.2014 DECLARE @input Int -- Int32 SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 - -[TestDataMS].[dbo].[ExecuteProcStringParameters] - --- SqlServer.2014.MS SqlServer.2014 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2014.MS SqlServer.2014 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Issue1897] +[TestDataMS].[dbo].[ExecuteProcIntParameters] -- SqlServer.2014.MS SqlServer.2014 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() +[TestDataMS].[dbo].[ExecuteProcStringParameters] -- SqlServer.2014.MS SqlServer.2014 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestDataMS].[dbo].[OutRefEnumTest] +[TestDataMS].[dbo].[Person_SelectByKey] -- SqlServer.2014.MS SqlServer.2014 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[Person_SelectByKeyLowercase] -- SqlServer.2014.MS SqlServer.2014 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[Person_SelectAll] -- SqlServer.2014.MS SqlServer.2014 DECLARE @firstName NVarChar(50) -- String @@ -124,13 +144,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +[TestDataMS].[dbo].[Person_SelectByName] -- SqlServer.2014.MS SqlServer.2014 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2014.MS SqlServer.2014 DECLARE @FirstName NVarChar(50) -- String @@ -159,20 +181,28 @@ SET @PersonID = 0 [TestDataMS].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2014.MS SqlServer.2014 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestDataMS].[dbo].[Person_SelectAll] +[TestDataMS].[dbo].[Person_Update] -- SqlServer.2014.MS SqlServer.2014 -DECLARE @id Int -- Int32 -SET @id = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[Person_SelectByKey] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2014.MS SqlServer.2014 -DECLARE @id Int -- Int32 -SET @id = 0 -[TestDataMS].[dbo].[Person_SelectByKeyLowercase] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2014.MS SqlServer.2014 DECLARE @firstName NVarChar(50) -- String @@ -180,61 +210,55 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Person_SelectByName] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2014.MS SqlServer.2014 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[Person_SelectListByName] +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2014.MS SqlServer.2014 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[dbo].[Person_Update] +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2014.MS SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[dbo].[PersonSearch] +[TestDataMS].[dbo].[OutRefEnumTest] -- SqlServer.2014.MS SqlServer.2014 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 -[TestDataMS].[dbo].[QueryProcMultipleParameters] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2014.MS SqlServer.2014 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2014.MS SqlServer.2014 -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[DuplicateColumnNames] + +-- SqlServer.2014.MS SqlServer.2014 + +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2014.MS SqlServer.2014 DECLARE @table [dbo].[TestTableType] -- Structured -- Object @@ -243,141 +267,161 @@ SET @table = NULL [TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2014.MS SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2014.MS SqlServer.2014 SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2014.MS SqlServer.2014 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[PersonSearch] RollbackTransaction -- SqlServer.2014.MS SqlServer.2014 -select @@version - --- SqlServer.2014.MS SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -385,7 +429,7 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -393,9 +437,9 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -417,31 +461,31 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -449,53 +493,57 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -517,28 +565,28 @@ SET @table = NULL -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - -- SqlServer.2014.MS SqlServer.2014 SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2014.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2014.MS).sql b/SqlServer.2014.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2014.MS).sql index a6d975e70486..2085c0409a66 100644 --- a/SqlServer.2014.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2014.MS).sql +++ b/SqlServer.2014.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2014.MS).sql @@ -7,230 +7,284 @@ FROM -- SqlServer.2014.MS SqlServer.2014 -select @@version - --- SqlServer.2014.MS SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +292,7 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +300,9 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +324,31 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +356,57 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,16 +428,16 @@ SET @table = NULL -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMS].[dbo].[VariableResults] +[TestDataMS].[dbo].[PersonSearch] RollbackTransaction diff --git a/SqlServer.2014.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2014.MS).sql b/SqlServer.2014.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2014.MS).sql index 78f6429ab0b0..ab3b9d6ba78d 100644 --- a/SqlServer.2014.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2014.MS).sql +++ b/SqlServer.2014.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2014.MS).sql @@ -1,229 +1,283 @@ -- SqlServer.2014.MS SqlServer.2014 -select @@version - --- SqlServer.2014.MS SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,28 +421,28 @@ SET @table = NULL -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - -- SqlServer.2014.MS SqlServer.2014 SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2014.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2014.MS).sql b/SqlServer.2014.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2014.MS).sql index 78f6429ab0b0..ab3b9d6ba78d 100644 --- a/SqlServer.2014.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2014.MS).sql +++ b/SqlServer.2014.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2014.MS).sql @@ -1,229 +1,283 @@ -- SqlServer.2014.MS SqlServer.2014 -select @@version - --- SqlServer.2014.MS SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,28 +421,28 @@ SET @table = NULL -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - -- SqlServer.2014.MS SqlServer.2014 SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2014.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2014.MS).sql b/SqlServer.2014.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2014.MS).sql index 78f6429ab0b0..ab3b9d6ba78d 100644 --- a/SqlServer.2014.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2014.MS).sql +++ b/SqlServer.2014.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2014.MS).sql @@ -1,229 +1,283 @@ -- SqlServer.2014.MS SqlServer.2014 -select @@version - --- SqlServer.2014.MS SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014.MS SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,28 +421,28 @@ SET @table = NULL -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - -- SqlServer.2014.MS SqlServer.2014 SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2014.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2014.MS).sql b/SqlServer.2014.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2014.MS).sql index bde4876679ef..8ab2aa3b9e9b 100644 --- a/SqlServer.2014.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2014.MS).sql +++ b/SqlServer.2014.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2014.MS).sql @@ -7,9 +7,5 @@ FROM -- SqlServer.2014.MS SqlServer.2014 -select @@version - --- SqlServer.2014.MS SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() diff --git a/SqlServer.2014.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2014.MS).sql b/SqlServer.2014.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2014.MS).sql index a45893fa791f..671b5d68430f 100644 --- a/SqlServer.2014.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2014.MS).sql +++ b/SqlServer.2014.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2014.MS).sql @@ -14,125 +14,145 @@ FROM -- SqlServer.2014.MS SqlServer.2014 -select @@version - --- SqlServer.2014.MS SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 + +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014.MS SqlServer.2014 - -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -140,7 +160,7 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -148,9 +168,9 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -172,31 +192,31 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -204,53 +224,57 @@ sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014.MS SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -272,17 +296,17 @@ SET @table = NULL -- SqlServer.2014.MS SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2014.MS SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMS].[dbo].[VariableResults] +[TestDataMS].[dbo].[PersonSearch] RollbackTransaction -- SqlServer.2014.MS SqlServer.2014 diff --git a/SqlServer.2014/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2014).sql b/SqlServer.2014/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2014).sql index 32fb082504f6..5f50dba5e079 100644 --- a/SqlServer.2014/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2014).sql +++ b/SqlServer.2014/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2014).sql @@ -1,124 +1,144 @@ -- SqlServer.2014 -select @@version - --- SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -126,7 +146,7 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -134,9 +154,9 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -158,31 +178,31 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -190,53 +210,57 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -258,28 +282,28 @@ SET @table = NULL -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - -- SqlServer.2014 SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2014 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2014/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2014).sql b/SqlServer.2014/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2014).sql index 603341b572db..f63ae2bfe171 100644 --- a/SqlServer.2014/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2014).sql +++ b/SqlServer.2014/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2014).sql @@ -1,229 +1,283 @@ -- SqlServer.2014 -select @@version - --- SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,28 +421,28 @@ SET @table = NULL -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - -- SqlServer.2014 SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2014 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2014/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2014).sql b/SqlServer.2014/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2014).sql index 603341b572db..f63ae2bfe171 100644 --- a/SqlServer.2014/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2014).sql +++ b/SqlServer.2014/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2014).sql @@ -1,229 +1,283 @@ -- SqlServer.2014 -select @@version - --- SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,28 +421,28 @@ SET @table = NULL -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - -- SqlServer.2014 SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2014 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2014/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2014).sql b/SqlServer.2014/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2014).sql index 603341b572db..f63ae2bfe171 100644 --- a/SqlServer.2014/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2014).sql +++ b/SqlServer.2014/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2014).sql @@ -1,229 +1,283 @@ -- SqlServer.2014 -select @@version - --- SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,28 +421,28 @@ SET @table = NULL -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - -- SqlServer.2014 SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2014 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2014/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2014).sql b/SqlServer.2014/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2014).sql index 5b2f4c744901..a19a5de533be 100644 --- a/SqlServer.2014/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2014).sql +++ b/SqlServer.2014/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2014).sql @@ -1,229 +1,283 @@ -- SqlServer.2014 -select @@version - --- SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,348 +421,464 @@ SET @table = NULL -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - -- SqlServer.2014 SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -RollbackTransaction -- SqlServer.2014 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -select @@version +[TestData].[dbo].[PersonSearch] +RollbackTransaction -- SqlServer.2014 SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2014 -select @@version - --- SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2014/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2014).sql b/SqlServer.2014/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2014).sql index 5b2f4c744901..a19a5de533be 100644 --- a/SqlServer.2014/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2014).sql +++ b/SqlServer.2014/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2014).sql @@ -1,229 +1,283 @@ -- SqlServer.2014 -select @@version - --- SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,348 +421,464 @@ SET @table = NULL -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - -- SqlServer.2014 SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -RollbackTransaction -- SqlServer.2014 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -select @@version +[TestData].[dbo].[PersonSearch] +RollbackTransaction -- SqlServer.2014 SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2014 -select @@version - --- SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2014/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2014).sql b/SqlServer.2014/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2014).sql index fec25ff4e9a9..67e419812c01 100644 --- a/SqlServer.2014/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2014).sql +++ b/SqlServer.2014/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2014).sql @@ -7,230 +7,284 @@ FROM -- SqlServer.2014 -select @@version - --- SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +292,7 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +300,9 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +324,31 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +356,57 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,16 +428,16 @@ SET @table = NULL -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestData].[dbo].[VariableResults] +[TestData].[dbo].[PersonSearch] RollbackTransaction diff --git a/SqlServer.2014/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2014).sql b/SqlServer.2014/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2014).sql index 98f7737b207e..63cd2beead18 100644 --- a/SqlServer.2014/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2014).sql +++ b/SqlServer.2014/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2014).sql @@ -1,122 +1,142 @@ -- SqlServer.2014 -select @@version - --- SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 -[TestData].[dbo].[AddIssue792Record] +[TestData].[dbo].[Issue1897] -- SqlServer.2014 -[TestData].[dbo].[DuplicateColumnNames] +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2014 DECLARE @input Int -- Int32 SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2014 DECLARE @input Int -- Int32 SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 - -[TestData].[dbo].[ExecuteProcStringParameters] - --- SqlServer.2014 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2014 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Issue1897] +[TestData].[dbo].[ExecuteProcIntParameters] -- SqlServer.2014 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -SELECT * FROM [TestData].[dbo].[Issue1921]() +[TestData].[dbo].[ExecuteProcStringParameters] -- SqlServer.2014 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestData].[dbo].[OutRefEnumTest] +[TestData].[dbo].[Person_SelectByKey] -- SqlServer.2014 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[Person_SelectByKeyLowercase] -- SqlServer.2014 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[Person_SelectAll] -- SqlServer.2014 DECLARE @firstName NVarChar(50) -- String @@ -124,13 +144,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +[TestData].[dbo].[Person_SelectByName] -- SqlServer.2014 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[Person_SelectListByName] -- SqlServer.2014 DECLARE @FirstName NVarChar(50) -- String @@ -159,20 +181,28 @@ SET @PersonID = 0 [TestData].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2014 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestData].[dbo].[Person_SelectAll] +[TestData].[dbo].[Person_Update] -- SqlServer.2014 -DECLARE @id Int -- Int32 -SET @id = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[Person_SelectByKey] +[TestData].[dbo].[Person_Delete] -- SqlServer.2014 -DECLARE @id Int -- Int32 -SET @id = 0 -[TestData].[dbo].[Person_SelectByKeyLowercase] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2014 DECLARE @firstName NVarChar(50) -- String @@ -180,61 +210,55 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestData].[dbo].[Person_SelectByName] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2014 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -[TestData].[dbo].[Person_SelectListByName] +[TestData].[dbo].[VariableResults] -- SqlServer.2014 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[dbo].[Person_Update] +[TestData].[dbo].[OutRefTest] -- SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[dbo].[PersonSearch] +[TestData].[dbo].[OutRefEnumTest] -- SqlServer.2014 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 -[TestData].[dbo].[QueryProcMultipleParameters] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2014 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2014 -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[DuplicateColumnNames] + +-- SqlServer.2014 + +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2014 DECLARE @table [dbo].[TestTableType] -- Structured -- Object @@ -243,141 +267,161 @@ SET @table = NULL [TestData].[dbo].[TableTypeTestProc] -- SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2014 SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2014 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[PersonSearch] RollbackTransaction -- SqlServer.2014 -select @@version - --- SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -385,7 +429,7 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -393,9 +437,9 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -417,31 +461,31 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -449,53 +493,57 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -517,28 +565,28 @@ SET @table = NULL -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - -- SqlServer.2014 SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2014 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2014/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2014).sql b/SqlServer.2014/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2014).sql index fec25ff4e9a9..67e419812c01 100644 --- a/SqlServer.2014/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2014).sql +++ b/SqlServer.2014/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2014).sql @@ -7,230 +7,284 @@ FROM -- SqlServer.2014 -select @@version - --- SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +292,7 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +300,9 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +324,31 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +356,57 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,16 +428,16 @@ SET @table = NULL -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestData].[dbo].[VariableResults] +[TestData].[dbo].[PersonSearch] RollbackTransaction diff --git a/SqlServer.2014/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2014).sql b/SqlServer.2014/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2014).sql index 603341b572db..f63ae2bfe171 100644 --- a/SqlServer.2014/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2014).sql +++ b/SqlServer.2014/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2014).sql @@ -1,229 +1,283 @@ -- SqlServer.2014 -select @@version - --- SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,28 +421,28 @@ SET @table = NULL -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - -- SqlServer.2014 SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2014 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2014/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2014).sql b/SqlServer.2014/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2014).sql index 603341b572db..f63ae2bfe171 100644 --- a/SqlServer.2014/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2014).sql +++ b/SqlServer.2014/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2014).sql @@ -1,229 +1,283 @@ -- SqlServer.2014 -select @@version - --- SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,28 +421,28 @@ SET @table = NULL -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - -- SqlServer.2014 SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2014 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2014/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2014).sql b/SqlServer.2014/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2014).sql index 603341b572db..f63ae2bfe171 100644 --- a/SqlServer.2014/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2014).sql +++ b/SqlServer.2014/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2014).sql @@ -1,229 +1,283 @@ -- SqlServer.2014 -select @@version - --- SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2014 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2014 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -231,7 +285,7 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -239,9 +293,9 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -263,31 +317,31 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -295,53 +349,57 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,28 +421,28 @@ SET @table = NULL -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - -- SqlServer.2014 SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2014 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] + RollbackTransaction diff --git a/SqlServer.2014/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2014).sql b/SqlServer.2014/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2014).sql index 58fb9f3dab31..61f1b43f9e72 100644 --- a/SqlServer.2014/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2014).sql +++ b/SqlServer.2014/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2014).sql @@ -7,9 +7,5 @@ FROM -- SqlServer.2014 -select @@version - --- SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() diff --git a/SqlServer.2014/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2014).sql b/SqlServer.2014/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2014).sql index 9d4a1015820e..0c5759e0b488 100644 --- a/SqlServer.2014/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2014).sql +++ b/SqlServer.2014/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2014).sql @@ -14,125 +14,145 @@ FROM -- SqlServer.2014 -select @@version - --- SqlServer.2014 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2014 + +SELECT * FROM [TestData].[dbo].[Issue1921]() + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2014 - -SELECT * FROM [TestData].[dbo].[Issue1921]() - -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -140,7 +160,7 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -148,9 +168,9 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -172,31 +192,31 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -204,53 +224,57 @@ sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2014 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2014 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -272,17 +296,17 @@ SET @table = NULL -- SqlServer.2014 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2014 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestData].[dbo].[VariableResults] +[TestData].[dbo].[PersonSearch] RollbackTransaction -- SqlServer.2014 diff --git a/SqlServer.2016.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2016.MS).sql b/SqlServer.2016.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2016.MS).sql index 96d60447f444..26c67138db00 100644 --- a/SqlServer.2016.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2016.MS).sql +++ b/SqlServer.2016.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2016.MS).sql @@ -1,60 +1,88 @@ -- SqlServer.2016.MS SqlServer.2016 -select @@version - --- SqlServer.2016.MS SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016.MS SqlServer.2016 + +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -70,27 +98,29 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -98,69 +128,63 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -182,15 +206,15 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -198,45 +222,47 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -244,18 +270,12 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016.MS SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' @@ -271,14 +291,18 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2016.MS SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2016.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2016.MS).sql b/SqlServer.2016.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2016.MS).sql index ab36aa6fa5cb..ea08d75e406e 100644 --- a/SqlServer.2016.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2016.MS).sql +++ b/SqlServer.2016.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2016.MS).sql @@ -1,172 +1,227 @@ -- SqlServer.2016.MS SqlServer.2016 -select @@version - --- SqlServer.2016.MS SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016.MS SqlServer.2016 + +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -182,27 +237,29 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -210,69 +267,63 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -294,15 +345,15 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -310,45 +361,47 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +409,12 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016.MS SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' @@ -383,14 +430,18 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2016.MS SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2016.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2016.MS).sql b/SqlServer.2016.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2016.MS).sql index ab36aa6fa5cb..ea08d75e406e 100644 --- a/SqlServer.2016.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2016.MS).sql +++ b/SqlServer.2016.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2016.MS).sql @@ -1,172 +1,227 @@ -- SqlServer.2016.MS SqlServer.2016 -select @@version - --- SqlServer.2016.MS SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016.MS SqlServer.2016 + +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -182,27 +237,29 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -210,69 +267,63 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -294,15 +345,15 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -310,45 +361,47 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +409,12 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016.MS SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' @@ -383,14 +430,18 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2016.MS SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2016.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2016.MS).sql b/SqlServer.2016.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2016.MS).sql index 4da57217b0ac..648a3bd8525f 100644 --- a/SqlServer.2016.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2016.MS).sql +++ b/SqlServer.2016.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2016.MS).sql @@ -67,173 +67,228 @@ CREATE TABLE TemporalTable4 -- SqlServer.2016.MS SqlServer.2016 -select @@version - --- SqlServer.2016.MS SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016.MS SqlServer.2016 + +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -249,27 +304,29 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -277,69 +334,63 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -361,15 +412,15 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -377,45 +428,47 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -423,18 +476,12 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016.MS SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' @@ -450,14 +497,18 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2016.MS SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2016.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2016.MS).sql b/SqlServer.2016.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2016.MS).sql index 48448a92a424..fe7ed7883aea 100644 --- a/SqlServer.2016.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2016.MS).sql +++ b/SqlServer.2016.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2016.MS).sql @@ -67,174 +67,231 @@ CREATE TABLE TemporalTable4 -- SqlServer.2016.MS SqlServer.2016 -select @@version - --- SqlServer.2016.MS SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - (t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [o].[object_id] = [a_Table].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL - ) AND t.temporal_type <> 1 + [o].[is_ms_shipped] = 0 AND + [o].[type] IN (N'U', N'V') AND + ([a_Table].[object_id] IS NULL OR [a_Table].[temporal_type] <> 1 OR [a_Table].[temporal_type] IS NULL) AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016.MS SqlServer.2016 + +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -250,27 +307,29 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -278,69 +337,63 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -362,15 +415,15 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -378,45 +431,47 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -424,18 +479,12 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016.MS SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' @@ -451,14 +500,18 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2016.MS SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2016.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2016.MS).sql b/SqlServer.2016.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2016.MS).sql index ab36aa6fa5cb..ea08d75e406e 100644 --- a/SqlServer.2016.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2016.MS).sql +++ b/SqlServer.2016.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2016.MS).sql @@ -1,172 +1,227 @@ -- SqlServer.2016.MS SqlServer.2016 -select @@version - --- SqlServer.2016.MS SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016.MS SqlServer.2016 + +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -182,27 +237,29 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -210,69 +267,63 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -294,15 +345,15 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -310,45 +361,47 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +409,12 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016.MS SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' @@ -383,14 +430,18 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2016.MS SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2016.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2016.MS).sql b/SqlServer.2016.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2016.MS).sql index 44e0270f5a11..8a6e1119666f 100644 --- a/SqlServer.2016.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2016.MS).sql +++ b/SqlServer.2016.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2016.MS).sql @@ -1,172 +1,227 @@ -- SqlServer.2016.MS SqlServer.2016 -select @@version - --- SqlServer.2016.MS SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016.MS SqlServer.2016 + +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -182,27 +237,29 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -210,69 +267,63 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -294,15 +345,15 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -310,45 +361,47 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +409,12 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016.MS SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' @@ -383,349 +430,455 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2016.MS SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set RollbackTransaction -- SqlServer.2016.MS SqlServer.2016 -select @@version - --- SqlServer.2016.MS SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2016.MS SqlServer.2016 -select @@version - --- SqlServer.2016.MS SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2016.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2016.MS).sql b/SqlServer.2016.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2016.MS).sql index 44e0270f5a11..8a6e1119666f 100644 --- a/SqlServer.2016.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2016.MS).sql +++ b/SqlServer.2016.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2016.MS).sql @@ -1,172 +1,227 @@ -- SqlServer.2016.MS SqlServer.2016 -select @@version - --- SqlServer.2016.MS SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016.MS SqlServer.2016 + +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -182,27 +237,29 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -210,69 +267,63 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -294,15 +345,15 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -310,45 +361,47 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +409,12 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016.MS SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' @@ -383,349 +430,455 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2016.MS SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set RollbackTransaction -- SqlServer.2016.MS SqlServer.2016 -select @@version - --- SqlServer.2016.MS SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2016.MS SqlServer.2016 -select @@version - --- SqlServer.2016.MS SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2016.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2016.MS).sql b/SqlServer.2016.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2016.MS).sql index fa70b39ea960..84cc94acb99d 100644 --- a/SqlServer.2016.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2016.MS).sql +++ b/SqlServer.2016.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2016.MS).sql @@ -7,173 +7,228 @@ FROM -- SqlServer.2016.MS SqlServer.2016 -select @@version - --- SqlServer.2016.MS SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016.MS SqlServer.2016 + +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -189,103 +244,95 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - --- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' -sp_describe_first_result_set +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String SET @params = N'@id int' @@ -293,9 +340,9 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set @@ -317,45 +364,39 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set --- SqlServer.2016.MS SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,18 +404,12 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016.MS SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' @@ -389,4 +424,20 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] +-- SqlServer.2016.MS SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' + +sp_describe_first_result_set + +-- SqlServer.2016.MS SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.2016.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2016.MS).sql b/SqlServer.2016.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2016.MS).sql index d7dbe3eb5555..1ba7d8fdc28f 100644 --- a/SqlServer.2016.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2016.MS).sql +++ b/SqlServer.2016.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2016.MS).sql @@ -1,166 +1,162 @@ -- SqlServer.2016.MS SqlServer.2016 -select @@version - --- SqlServer.2016.MS SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2016.MS SqlServer.2016 - -[TestDataMS].[dbo].[AddIssue792Record] + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 -[TestDataMS].[dbo].[DuplicateColumnNames] +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2016.MS SqlServer.2016 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2016.MS SqlServer.2016 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[dbo].[DuplicateColumnNames] -- SqlServer.2016.MS SqlServer.2016 -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2016.MS SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -[TestDataMS].[dbo].[Issue1897] +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2016.MS SqlServer.2016 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2016.MS SqlServer.2016 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' -[TestDataMS].[dbo].[OutRefEnumTest] +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016.MS SqlServer.2016 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2016.MS SqlServer.2016 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[Issue1897] -- SqlServer.2016.MS SqlServer.2016 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2016.MS SqlServer.2016 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2016.MS SqlServer.2016 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMS].[dbo].[Person_Insert] +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2016.MS SqlServer.2016 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Person_Insert_OutputParameter] +[TestDataMS].[dbo].[ExecuteProcIntParameters] -- SqlServer.2016.MS SqlServer.2016 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Person_SelectAll] +[TestDataMS].[dbo].[ExecuteProcStringParameters] -- SqlServer.2016.MS SqlServer.2016 DECLARE @id Int -- Int32 @@ -174,6 +170,10 @@ SET @id = 0 [TestDataMS].[dbo].[Person_SelectByKeyLowercase] +-- SqlServer.2016.MS SqlServer.2016 + +[TestDataMS].[dbo].[Person_SelectAll] + -- SqlServer.2016.MS SqlServer.2016 DECLARE @firstName NVarChar(50) -- String SET @firstName = N'' @@ -191,8 +191,6 @@ SET @lastName = N'' [TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2016.MS SqlServer.2016 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 DECLARE @FirstName NVarChar(50) -- String SET @FirstName = N'' DECLARE @LastName NVarChar(50) -- String @@ -202,45 +200,53 @@ SET @MiddleName = N'' DECLARE @Gender Char(1) -- AnsiStringFixedLength SET @Gender = char(0) -[TestDataMS].[dbo].[Person_Update] +[TestDataMS].[dbo].[Person_Insert] -- SqlServer.2016.MS SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[PersonSearch] +[TestDataMS].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2016.MS SqlServer.2016 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Person_Update] -- SqlServer.2016.MS SqlServer.2016 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2016.MS SqlServer.2016 -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2016.MS SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[TableTypeTestProc] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2016.MS SqlServer.2016 DECLARE @ReturnFullRow Bit -- Boolean @@ -249,71 +255,117 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2016.MS SqlServer.2016 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2016.MS SqlServer.2016 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[OutRefEnumTest] RollbackTransaction -- SqlServer.2016.MS SqlServer.2016 -select @@version - --- SqlServer.2016.MS SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016.MS SqlServer.2016 + +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -329,27 +381,29 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -357,69 +411,63 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -441,15 +489,15 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -457,45 +505,47 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -503,18 +553,12 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016.MS SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' @@ -530,14 +574,18 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2016.MS SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2016.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2016.MS).sql b/SqlServer.2016.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2016.MS).sql index fa70b39ea960..84cc94acb99d 100644 --- a/SqlServer.2016.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2016.MS).sql +++ b/SqlServer.2016.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2016.MS).sql @@ -7,173 +7,228 @@ FROM -- SqlServer.2016.MS SqlServer.2016 -select @@version - --- SqlServer.2016.MS SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016.MS SqlServer.2016 + +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -189,103 +244,95 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - --- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' -sp_describe_first_result_set +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String SET @params = N'@id int' @@ -293,9 +340,9 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set @@ -317,45 +364,39 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set --- SqlServer.2016.MS SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,18 +404,12 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016.MS SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' @@ -389,4 +424,20 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] +-- SqlServer.2016.MS SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' + +sp_describe_first_result_set + +-- SqlServer.2016.MS SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.2016.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2016.MS).sql b/SqlServer.2016.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2016.MS).sql index ab36aa6fa5cb..ea08d75e406e 100644 --- a/SqlServer.2016.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2016.MS).sql +++ b/SqlServer.2016.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2016.MS).sql @@ -1,172 +1,227 @@ -- SqlServer.2016.MS SqlServer.2016 -select @@version - --- SqlServer.2016.MS SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016.MS SqlServer.2016 + +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -182,27 +237,29 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -210,69 +267,63 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -294,15 +345,15 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -310,45 +361,47 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +409,12 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016.MS SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' @@ -383,14 +430,18 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2016.MS SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2016.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2016.MS).sql b/SqlServer.2016.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2016.MS).sql index ab36aa6fa5cb..ea08d75e406e 100644 --- a/SqlServer.2016.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2016.MS).sql +++ b/SqlServer.2016.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2016.MS).sql @@ -1,172 +1,227 @@ -- SqlServer.2016.MS SqlServer.2016 -select @@version - --- SqlServer.2016.MS SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016.MS SqlServer.2016 + +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -182,27 +237,29 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -210,69 +267,63 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -294,15 +345,15 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -310,45 +361,47 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +409,12 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016.MS SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' @@ -383,14 +430,18 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2016.MS SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2016.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2016.MS).sql b/SqlServer.2016.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2016.MS).sql index ab36aa6fa5cb..ea08d75e406e 100644 --- a/SqlServer.2016.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2016.MS).sql +++ b/SqlServer.2016.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2016.MS).sql @@ -1,172 +1,227 @@ -- SqlServer.2016.MS SqlServer.2016 -select @@version - --- SqlServer.2016.MS SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016.MS SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016.MS SqlServer.2016 + +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -182,27 +237,29 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -210,69 +267,63 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() +SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -294,15 +345,15 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -310,45 +361,47 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +409,12 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016.MS SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' @@ -383,14 +430,18 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2016.MS SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL) +sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2016.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2016.MS).sql b/SqlServer.2016.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2016.MS).sql index 9c9283785ef2..d90fe0fac204 100644 --- a/SqlServer.2016.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2016.MS).sql +++ b/SqlServer.2016.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2016.MS).sql @@ -7,9 +7,5 @@ FROM -- SqlServer.2016.MS SqlServer.2016 -select @@version - --- SqlServer.2016.MS SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() diff --git a/SqlServer.2016.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2016.MS).sql b/SqlServer.2016.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2016.MS).sql index 1e41deda527c..a42cb024cf27 100644 --- a/SqlServer.2016.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2016.MS).sql +++ b/SqlServer.2016.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2016.MS).sql @@ -14,61 +14,89 @@ FROM -- SqlServer.2016.MS SqlServer.2016 -select @@version - --- SqlServer.2016.MS SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016.MS SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016.MS SqlServer.2016 + +SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -84,103 +112,95 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL) +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -SELECT * FROM [TestDataMS].[dbo].[Issue1921]() - --- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' -sp_describe_first_result_set +SELECT * FROM [TestDataMS].[dbo].[Issue1921]() -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String SET @params = N'@id int' @@ -188,9 +208,9 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set @@ -212,45 +232,39 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set --- SqlServer.2016.MS SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -258,18 +272,12 @@ sp_describe_first_result_set -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016.MS SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2016.MS SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' @@ -284,6 +292,22 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] +-- SqlServer.2016.MS SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' + +sp_describe_first_result_set + +-- SqlServer.2016.MS SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' + +sp_describe_first_result_set + RollbackTransaction -- SqlServer.2016.MS SqlServer.2016 diff --git a/SqlServer.2016/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2016).sql b/SqlServer.2016/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2016).sql index 54fa0d8e880e..28c6887f1ea7 100644 --- a/SqlServer.2016/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2016).sql +++ b/SqlServer.2016/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2016).sql @@ -1,60 +1,88 @@ -- SqlServer.2016 -select @@version - --- SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016 + +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -70,27 +98,29 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -98,69 +128,63 @@ sp_describe_first_result_set -- SqlServer.2016 -SELECT * FROM [TestData].[dbo].[Issue1921]() +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -182,15 +206,15 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -198,45 +222,47 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -244,18 +270,12 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -271,14 +291,18 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2016/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2016).sql b/SqlServer.2016/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2016).sql index 9070a95bdb5f..a36b4d47fd44 100644 --- a/SqlServer.2016/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2016).sql +++ b/SqlServer.2016/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2016).sql @@ -1,172 +1,227 @@ -- SqlServer.2016 -select @@version - --- SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016 + +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -182,27 +237,29 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -210,69 +267,63 @@ sp_describe_first_result_set -- SqlServer.2016 -SELECT * FROM [TestData].[dbo].[Issue1921]() +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -294,15 +345,15 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -310,45 +361,47 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +409,12 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -383,14 +430,18 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2016/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2016).sql b/SqlServer.2016/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2016).sql index 9070a95bdb5f..a36b4d47fd44 100644 --- a/SqlServer.2016/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2016).sql +++ b/SqlServer.2016/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2016).sql @@ -1,172 +1,227 @@ -- SqlServer.2016 -select @@version - --- SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016 + +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -182,27 +237,29 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -210,69 +267,63 @@ sp_describe_first_result_set -- SqlServer.2016 -SELECT * FROM [TestData].[dbo].[Issue1921]() +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -294,15 +345,15 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -310,45 +361,47 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +409,12 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -383,14 +430,18 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2016/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2016).sql b/SqlServer.2016/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2016).sql index 03d8ac61df2d..c20be3f19dcd 100644 --- a/SqlServer.2016/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2016).sql +++ b/SqlServer.2016/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2016).sql @@ -67,173 +67,228 @@ CREATE TABLE TemporalTable4 -- SqlServer.2016 -select @@version - --- SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016 + +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -249,27 +304,29 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -277,69 +334,63 @@ sp_describe_first_result_set -- SqlServer.2016 -SELECT * FROM [TestData].[dbo].[Issue1921]() +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -361,15 +412,15 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -377,45 +428,47 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -423,18 +476,12 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -450,14 +497,18 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2016/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2016).sql b/SqlServer.2016/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2016).sql index c644f30a761e..9bdca4a1fd82 100644 --- a/SqlServer.2016/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2016).sql +++ b/SqlServer.2016/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2016).sql @@ -67,174 +67,231 @@ CREATE TABLE TemporalTable4 -- SqlServer.2016 -select @@version - --- SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - (t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [o].[object_id] = [a_Table].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL - ) AND t.temporal_type <> 1 + [o].[is_ms_shipped] = 0 AND + [o].[type] IN (N'U', N'V') AND + ([a_Table].[object_id] IS NULL OR [a_Table].[temporal_type] <> 1 OR [a_Table].[temporal_type] IS NULL) AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016 + +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -250,27 +307,29 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -278,69 +337,63 @@ sp_describe_first_result_set -- SqlServer.2016 -SELECT * FROM [TestData].[dbo].[Issue1921]() +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -362,15 +415,15 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -378,45 +431,47 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -424,18 +479,12 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -451,14 +500,18 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2016/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2016).sql b/SqlServer.2016/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2016).sql index 9070a95bdb5f..a36b4d47fd44 100644 --- a/SqlServer.2016/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2016).sql +++ b/SqlServer.2016/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2016).sql @@ -1,172 +1,227 @@ -- SqlServer.2016 -select @@version - --- SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016 + +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -182,27 +237,29 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -210,69 +267,63 @@ sp_describe_first_result_set -- SqlServer.2016 -SELECT * FROM [TestData].[dbo].[Issue1921]() +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -294,15 +345,15 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -310,45 +361,47 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +409,12 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -383,14 +430,18 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2016/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2016).sql b/SqlServer.2016/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2016).sql index 607e46895454..3aeba1d9581c 100644 --- a/SqlServer.2016/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2016).sql +++ b/SqlServer.2016/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2016).sql @@ -1,172 +1,227 @@ -- SqlServer.2016 -select @@version - --- SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016 + +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -182,27 +237,29 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -210,69 +267,63 @@ sp_describe_first_result_set -- SqlServer.2016 -SELECT * FROM [TestData].[dbo].[Issue1921]() +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -294,15 +345,15 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -310,45 +361,47 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +409,12 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -383,349 +430,455 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set RollbackTransaction -- SqlServer.2016 -select @@version - --- SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2016 -select @@version - --- SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2016/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2016).sql b/SqlServer.2016/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2016).sql index 607e46895454..3aeba1d9581c 100644 --- a/SqlServer.2016/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2016).sql +++ b/SqlServer.2016/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2016).sql @@ -1,172 +1,227 @@ -- SqlServer.2016 -select @@version - --- SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016 + +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -182,27 +237,29 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -210,69 +267,63 @@ sp_describe_first_result_set -- SqlServer.2016 -SELECT * FROM [TestData].[dbo].[Issue1921]() +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -294,15 +345,15 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -310,45 +361,47 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +409,12 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -383,349 +430,455 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set RollbackTransaction -- SqlServer.2016 -select @@version - --- SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2016 -select @@version - --- SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2016/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2016).sql b/SqlServer.2016/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2016).sql index 71df806b4d7a..31a28dd94973 100644 --- a/SqlServer.2016/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2016).sql +++ b/SqlServer.2016/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2016).sql @@ -7,173 +7,228 @@ FROM -- SqlServer.2016 -select @@version - --- SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016 + +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -189,103 +244,95 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -SELECT * FROM [TestData].[dbo].[Issue1921]() - --- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' -sp_describe_first_result_set +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String SET @params = N'@id int' @@ -293,9 +340,9 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set @@ -317,45 +364,39 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set --- SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,18 +404,12 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -389,4 +424,20 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] +-- SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' + +sp_describe_first_result_set + +-- SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.2016/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2016).sql b/SqlServer.2016/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2016).sql index 765eb25f42c4..d85a3add6fca 100644 --- a/SqlServer.2016/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2016).sql +++ b/SqlServer.2016/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2016).sql @@ -1,166 +1,162 @@ -- SqlServer.2016 -select @@version - --- SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2016 - -[TestData].[dbo].[AddIssue792Record] + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2016 -[TestData].[dbo].[DuplicateColumnNames] +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2016 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2016 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2016 -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -[TestData].[dbo].[Issue1897] +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2016 -SELECT * FROM [TestData].[dbo].[Issue1921]() +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2016 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' -[TestData].[dbo].[OutRefEnumTest] +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[PersonSearch] -- SqlServer.2016 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[Issue1897] -- SqlServer.2016 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2016 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2016 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[Person_Insert] +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2016 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Person_Insert_OutputParameter] +[TestData].[dbo].[ExecuteProcIntParameters] -- SqlServer.2016 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Person_SelectAll] +[TestData].[dbo].[ExecuteProcStringParameters] -- SqlServer.2016 DECLARE @id Int -- Int32 @@ -174,6 +170,10 @@ SET @id = 0 [TestData].[dbo].[Person_SelectByKeyLowercase] +-- SqlServer.2016 + +[TestData].[dbo].[Person_SelectAll] + -- SqlServer.2016 DECLARE @firstName NVarChar(50) -- String SET @firstName = N'' @@ -191,8 +191,6 @@ SET @lastName = N'' [TestData].[dbo].[Person_SelectListByName] -- SqlServer.2016 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 DECLARE @FirstName NVarChar(50) -- String SET @FirstName = N'' DECLARE @LastName NVarChar(50) -- String @@ -202,45 +200,53 @@ SET @MiddleName = N'' DECLARE @Gender Char(1) -- AnsiStringFixedLength SET @Gender = char(0) -[TestData].[dbo].[Person_Update] +[TestData].[dbo].[Person_Insert] -- SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[PersonSearch] +[TestData].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2016 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Person_Update] -- SqlServer.2016 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Person_Delete] -- SqlServer.2016 -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[TableTypeTestProc] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2016 DECLARE @ReturnFullRow Bit -- Boolean @@ -249,71 +255,117 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2016 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +[TestData].[dbo].[OutRefTest] -- SqlServer.2016 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[OutRefEnumTest] RollbackTransaction -- SqlServer.2016 -select @@version - --- SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016 + +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -329,27 +381,29 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -357,69 +411,63 @@ sp_describe_first_result_set -- SqlServer.2016 -SELECT * FROM [TestData].[dbo].[Issue1921]() +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -441,15 +489,15 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -457,45 +505,47 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -503,18 +553,12 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -530,14 +574,18 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2016/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2016).sql b/SqlServer.2016/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2016).sql index 71df806b4d7a..31a28dd94973 100644 --- a/SqlServer.2016/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2016).sql +++ b/SqlServer.2016/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2016).sql @@ -7,173 +7,228 @@ FROM -- SqlServer.2016 -select @@version - --- SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016 + +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -189,103 +244,95 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -SELECT * FROM [TestData].[dbo].[Issue1921]() - --- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' -sp_describe_first_result_set +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String SET @params = N'@id int' @@ -293,9 +340,9 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set @@ -317,45 +364,39 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set --- SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,18 +404,12 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -389,4 +424,20 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] +-- SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' + +sp_describe_first_result_set + +-- SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.2016/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2016).sql b/SqlServer.2016/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2016).sql index 9070a95bdb5f..a36b4d47fd44 100644 --- a/SqlServer.2016/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2016).sql +++ b/SqlServer.2016/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2016).sql @@ -1,172 +1,227 @@ -- SqlServer.2016 -select @@version - --- SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016 + +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -182,27 +237,29 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -210,69 +267,63 @@ sp_describe_first_result_set -- SqlServer.2016 -SELECT * FROM [TestData].[dbo].[Issue1921]() +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -294,15 +345,15 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -310,45 +361,47 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +409,12 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -383,14 +430,18 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2016/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2016).sql b/SqlServer.2016/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2016).sql index 9070a95bdb5f..a36b4d47fd44 100644 --- a/SqlServer.2016/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2016).sql +++ b/SqlServer.2016/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2016).sql @@ -1,172 +1,227 @@ -- SqlServer.2016 -select @@version - --- SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016 + +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -182,27 +237,29 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -210,69 +267,63 @@ sp_describe_first_result_set -- SqlServer.2016 -SELECT * FROM [TestData].[dbo].[Issue1921]() +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -294,15 +345,15 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -310,45 +361,47 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +409,12 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -383,14 +430,18 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2016/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2016).sql b/SqlServer.2016/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2016).sql index 9070a95bdb5f..a36b4d47fd44 100644 --- a/SqlServer.2016/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2016).sql +++ b/SqlServer.2016/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2016).sql @@ -1,172 +1,227 @@ -- SqlServer.2016 -select @@version - --- SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2016 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2016 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016 + +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -182,27 +237,29 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -210,69 +267,63 @@ sp_describe_first_result_set -- SqlServer.2016 -SELECT * FROM [TestData].[dbo].[Issue1921]() +SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -294,15 +345,15 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -310,45 +361,47 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +409,12 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -383,14 +430,18 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL) +sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2016/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2016).sql b/SqlServer.2016/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2016).sql index 57b8bf7e179d..608ed7ea7cb3 100644 --- a/SqlServer.2016/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2016).sql +++ b/SqlServer.2016/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2016).sql @@ -7,9 +7,5 @@ FROM -- SqlServer.2016 -select @@version - --- SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() diff --git a/SqlServer.2016/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2016).sql b/SqlServer.2016/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2016).sql index ebdee3519966..310615759f39 100644 --- a/SqlServer.2016/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2016).sql +++ b/SqlServer.2016/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2016).sql @@ -14,61 +14,89 @@ FROM -- SqlServer.2016 -select @@version - --- SqlServer.2016 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2016 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2016 + +SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -84,103 +112,95 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2016 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -SELECT * FROM [TestData].[dbo].[GetParentByID](NULL) +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2016 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -SELECT * FROM [TestData].[dbo].[Issue1921]() - --- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2016 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' -sp_describe_first_result_set +SELECT * FROM [TestData].[dbo].[Issue1921]() -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String SET @params = N'@id int' @@ -188,9 +208,9 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set @@ -212,45 +232,39 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set --- SqlServer.2016 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -258,18 +272,12 @@ sp_describe_first_result_set -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2016 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2016 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -284,6 +292,22 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] +-- SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' + +sp_describe_first_result_set + +-- SqlServer.2016 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' + +sp_describe_first_result_set + RollbackTransaction -- SqlServer.2016 diff --git a/SqlServer.2017.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2017.MS).sql b/SqlServer.2017.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2017.MS).sql index 85eb97855bba..ee687dab98f3 100644 --- a/SqlServer.2017.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2017.MS).sql +++ b/SqlServer.2017.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2017.MS).sql @@ -1,92 +1,120 @@ -- SqlServer.2017.MS SqlServer.2017 -select @@version - --- SqlServer.2017.MS SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestDataMS].[dbo].[TableTypeTestProc] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -102,57 +130,49 @@ EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -166,33 +186,33 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -206,77 +226,81 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestDataMS].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - --- SqlServer.2017.MS SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2017.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2017.MS).sql b/SqlServer.2017.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2017.MS).sql index d90e131a4eb9..cdae99c9381c 100644 --- a/SqlServer.2017.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2017.MS).sql +++ b/SqlServer.2017.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2017.MS).sql @@ -1,204 +1,259 @@ -- SqlServer.2017.MS SqlServer.2017 -select @@version - --- SqlServer.2017.MS SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestDataMS].[dbo].[TableTypeTestProc] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -214,57 +269,49 @@ EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +325,33 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +365,81 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestDataMS].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - --- SqlServer.2017.MS SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2017.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2017.MS).sql b/SqlServer.2017.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2017.MS).sql index d90e131a4eb9..cdae99c9381c 100644 --- a/SqlServer.2017.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2017.MS).sql +++ b/SqlServer.2017.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2017.MS).sql @@ -1,204 +1,259 @@ -- SqlServer.2017.MS SqlServer.2017 -select @@version - --- SqlServer.2017.MS SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestDataMS].[dbo].[TableTypeTestProc] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -214,57 +269,49 @@ EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +325,33 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +365,81 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestDataMS].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - --- SqlServer.2017.MS SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2017.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2017.MS).sql b/SqlServer.2017.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2017.MS).sql index fb84216cf55b..9adb76efc120 100644 --- a/SqlServer.2017.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2017.MS).sql +++ b/SqlServer.2017.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2017.MS).sql @@ -67,205 +67,260 @@ CREATE TABLE TemporalTable4 -- SqlServer.2017.MS SqlServer.2017 -select @@version - --- SqlServer.2017.MS SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestDataMS].[dbo].[TableTypeTestProc] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -281,57 +336,49 @@ EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -345,33 +392,33 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -385,77 +432,81 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestDataMS].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - --- SqlServer.2017.MS SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2017.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2017.MS).sql b/SqlServer.2017.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2017.MS).sql index 285e288418d4..639ac2d0516c 100644 --- a/SqlServer.2017.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2017.MS).sql +++ b/SqlServer.2017.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2017.MS).sql @@ -67,206 +67,263 @@ CREATE TABLE TemporalTable4 -- SqlServer.2017.MS SqlServer.2017 -select @@version - --- SqlServer.2017.MS SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - (t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [o].[object_id] = [a_Table].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL - ) AND t.temporal_type <> 1 + [o].[is_ms_shipped] = 0 AND + [o].[type] IN (N'U', N'V') AND + ([a_Table].[object_id] IS NULL OR [a_Table].[temporal_type] <> 1 OR [a_Table].[temporal_type] IS NULL) AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestDataMS].[dbo].[TableTypeTestProc] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -282,57 +339,49 @@ EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -346,33 +395,33 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -386,77 +435,81 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestDataMS].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - --- SqlServer.2017.MS SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2017.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2017.MS).sql b/SqlServer.2017.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2017.MS).sql index d90e131a4eb9..cdae99c9381c 100644 --- a/SqlServer.2017.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2017.MS).sql +++ b/SqlServer.2017.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2017.MS).sql @@ -1,204 +1,259 @@ -- SqlServer.2017.MS SqlServer.2017 -select @@version - --- SqlServer.2017.MS SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestDataMS].[dbo].[TableTypeTestProc] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -214,57 +269,49 @@ EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +325,33 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +365,81 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestDataMS].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - --- SqlServer.2017.MS SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2017.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2017.MS).sql b/SqlServer.2017.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2017.MS).sql index 37a8e3dcc263..3cc7845b39e5 100644 --- a/SqlServer.2017.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2017.MS).sql +++ b/SqlServer.2017.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2017.MS).sql @@ -1,204 +1,259 @@ -- SqlServer.2017.MS SqlServer.2017 -select @@version - --- SqlServer.2017.MS SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestDataMS].[dbo].[TableTypeTestProc] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -214,57 +269,49 @@ EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +325,33 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +365,81 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestDataMS].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - --- SqlServer.2017.MS SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -397,335 +448,437 @@ sp_describe_first_result_set RollbackTransaction -- SqlServer.2017.MS SqlServer.2017 -select @@version - --- SqlServer.2017.MS SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2017.MS SqlServer.2017 -select @@version - --- SqlServer.2017.MS SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2017.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2017.MS).sql b/SqlServer.2017.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2017.MS).sql index 37a8e3dcc263..3cc7845b39e5 100644 --- a/SqlServer.2017.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2017.MS).sql +++ b/SqlServer.2017.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2017.MS).sql @@ -1,204 +1,259 @@ -- SqlServer.2017.MS SqlServer.2017 -select @@version - --- SqlServer.2017.MS SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestDataMS].[dbo].[TableTypeTestProc] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -214,57 +269,49 @@ EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +325,33 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +365,81 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestDataMS].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - --- SqlServer.2017.MS SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -397,335 +448,437 @@ sp_describe_first_result_set RollbackTransaction -- SqlServer.2017.MS SqlServer.2017 -select @@version - --- SqlServer.2017.MS SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2017.MS SqlServer.2017 -select @@version - --- SqlServer.2017.MS SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2017.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2017.MS).sql b/SqlServer.2017.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2017.MS).sql index c1f1c2c39d3d..a56479996980 100644 --- a/SqlServer.2017.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2017.MS).sql +++ b/SqlServer.2017.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2017.MS).sql @@ -7,237 +7,312 @@ FROM -- SqlServer.2017.MS SqlServer.2017 -select @@version - --- SqlServer.2017.MS SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestDataMS].[dbo].[TableTypeTestProc] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output int' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -245,7 +320,7 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -253,9 +328,9 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -277,31 +352,31 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -309,49 +384,37 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set --- SqlServer.2017.MS SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -363,30 +426,18 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2017.MS SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2017.MS SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - RollbackTransaction diff --git a/SqlServer.2017.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2017.MS).sql b/SqlServer.2017.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2017.MS).sql index ed87ae76a084..ceb1c2fcd3d6 100644 --- a/SqlServer.2017.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2017.MS).sql +++ b/SqlServer.2017.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2017.MS).sql @@ -1,122 +1,162 @@ -- SqlServer.2017.MS SqlServer.2017 -select @@version - --- SqlServer.2017.MS SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -[TestDataMS].[dbo].[AddIssue792Record] +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2017.MS SqlServer.2017 -[TestDataMS].[dbo].[DuplicateColumnNames] +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2017.MS SqlServer.2017 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') + +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] + +-- SqlServer.2017.MS SqlServer.2017 + +[TestDataMS].[dbo].[Issue1897] + +-- SqlServer.2017.MS SqlServer.2017 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2017.MS SqlServer.2017 DECLARE @input Int -- Int32 SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[ExecuteProcStringParameters] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2017.MS SqlServer.2017 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2017.MS SqlServer.2017 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestDataMS].[dbo].[Issue1897] +[TestDataMS].[dbo].[ExecuteProcIntParameters] -- SqlServer.2017.MS SqlServer.2017 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +[TestDataMS].[dbo].[ExecuteProcStringParameters] -- SqlServer.2017.MS SqlServer.2017 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestDataMS].[dbo].[OutRefEnumTest] +[TestDataMS].[dbo].[Person_SelectByKey] -- SqlServer.2017.MS SqlServer.2017 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[Person_SelectByKeyLowercase] -- SqlServer.2017.MS SqlServer.2017 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[Person_SelectAll] -- SqlServer.2017.MS SqlServer.2017 DECLARE @firstName NVarChar(50) -- String @@ -124,13 +164,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +[TestDataMS].[dbo].[Person_SelectByName] -- SqlServer.2017.MS SqlServer.2017 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2017.MS SqlServer.2017 DECLARE @FirstName NVarChar(50) -- String @@ -158,38 +200,6 @@ SET @PersonID = 0 [TestDataMS].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2017.MS SqlServer.2017 - -[TestDataMS].[dbo].[Person_SelectAll] - --- SqlServer.2017.MS SqlServer.2017 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKey] - --- SqlServer.2017.MS SqlServer.2017 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2017.MS SqlServer.2017 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectByName] - --- SqlServer.2017.MS SqlServer.2017 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectListByName] - -- SqlServer.2017.MS SqlServer.2017 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -205,62 +215,72 @@ SET @Gender = char(0) [TestDataMS].[dbo].[Person_Update] -- SqlServer.2017.MS SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[PersonSearch] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2017.MS SqlServer.2017 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2017.MS SqlServer.2017 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2017.MS SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2017.MS SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[dbo].[TableTypeTestProc] +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2017.MS SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[dbo].[VariableResults] +[TestDataMS].[dbo].[OutRefEnumTest] -- SqlServer.2017.MS SqlServer.2017 -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2017.MS SqlServer.2017 -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[SelectImplicitColumn] + +-- SqlServer.2017.MS SqlServer.2017 + +[TestDataMS].[dbo].[DuplicateColumnNames] -RollbackTransaction -- SqlServer.2017.MS SqlServer.2017 -select @@version +[TestDataMS].[dbo].[AddIssue792Record] +RollbackTransaction -- SqlServer.2017.MS SqlServer.2017 SELECT compatibility_level FROM sys.databases WHERE name = db_name() @@ -268,84 +288,116 @@ SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestDataMS].[dbo].[TableTypeTestProc] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -361,57 +413,49 @@ EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -425,33 +469,33 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -465,77 +509,81 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestDataMS].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - --- SqlServer.2017.MS SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2017.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2017.MS).sql b/SqlServer.2017.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2017.MS).sql index c1f1c2c39d3d..a56479996980 100644 --- a/SqlServer.2017.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2017.MS).sql +++ b/SqlServer.2017.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2017.MS).sql @@ -7,237 +7,312 @@ FROM -- SqlServer.2017.MS SqlServer.2017 -select @@version - --- SqlServer.2017.MS SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestDataMS].[dbo].[TableTypeTestProc] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output int' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -245,7 +320,7 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -253,9 +328,9 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -277,31 +352,31 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -309,49 +384,37 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set --- SqlServer.2017.MS SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -363,30 +426,18 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2017.MS SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2017.MS SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - RollbackTransaction diff --git a/SqlServer.2017.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2017.MS).sql b/SqlServer.2017.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2017.MS).sql index d90e131a4eb9..cdae99c9381c 100644 --- a/SqlServer.2017.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2017.MS).sql +++ b/SqlServer.2017.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2017.MS).sql @@ -1,204 +1,259 @@ -- SqlServer.2017.MS SqlServer.2017 -select @@version - --- SqlServer.2017.MS SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestDataMS].[dbo].[TableTypeTestProc] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -214,57 +269,49 @@ EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +325,33 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +365,81 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestDataMS].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - --- SqlServer.2017.MS SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2017.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2017.MS).sql b/SqlServer.2017.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2017.MS).sql index d90e131a4eb9..cdae99c9381c 100644 --- a/SqlServer.2017.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2017.MS).sql +++ b/SqlServer.2017.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2017.MS).sql @@ -1,204 +1,259 @@ -- SqlServer.2017.MS SqlServer.2017 -select @@version - --- SqlServer.2017.MS SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestDataMS].[dbo].[TableTypeTestProc] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -214,57 +269,49 @@ EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +325,33 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +365,81 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestDataMS].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - --- SqlServer.2017.MS SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2017.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2017.MS).sql b/SqlServer.2017.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2017.MS).sql index d90e131a4eb9..cdae99c9381c 100644 --- a/SqlServer.2017.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2017.MS).sql +++ b/SqlServer.2017.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2017.MS).sql @@ -1,204 +1,259 @@ -- SqlServer.2017.MS SqlServer.2017 -select @@version - --- SqlServer.2017.MS SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017.MS SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestDataMS].[dbo].[TableTypeTestProc] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -214,57 +269,49 @@ EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +325,33 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +365,81 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestDataMS].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - --- SqlServer.2017.MS SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2017.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2017.MS).sql b/SqlServer.2017.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2017.MS).sql index 36f3fc3c01ec..eff57e97c22e 100644 --- a/SqlServer.2017.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2017.MS).sql +++ b/SqlServer.2017.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2017.MS).sql @@ -7,9 +7,5 @@ FROM -- SqlServer.2017.MS SqlServer.2017 -select @@version - --- SqlServer.2017.MS SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() diff --git a/SqlServer.2017.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2017.MS).sql b/SqlServer.2017.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2017.MS).sql index d042e2f410b7..0a873695208b 100644 --- a/SqlServer.2017.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2017.MS).sql +++ b/SqlServer.2017.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2017.MS).sql @@ -14,125 +14,173 @@ FROM -- SqlServer.2017.MS SqlServer.2017 -select @@version - --- SqlServer.2017.MS SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestDataMS].[dbo].[TableTypeTestProc] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2017.MS SqlServer.2017 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output int' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -140,7 +188,7 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -148,9 +196,9 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -172,31 +220,31 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -204,49 +252,37 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set --- SqlServer.2017.MS SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -258,32 +294,20 @@ sp_describe_first_result_set -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2017.MS SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2017.MS SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2017.MS SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - RollbackTransaction -- SqlServer.2017.MS SqlServer.2017 diff --git a/SqlServer.2017/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2017).sql b/SqlServer.2017/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2017).sql index b811522e1d4a..063a9c3ca324 100644 --- a/SqlServer.2017/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2017).sql +++ b/SqlServer.2017/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2017).sql @@ -1,92 +1,120 @@ -- SqlServer.2017 -select @@version - --- SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestData].[dbo].[TableTypeTestProc] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[PersonSearch] -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -102,57 +130,49 @@ EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -166,33 +186,33 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -206,77 +226,81 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestData].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - --- SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2017/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2017).sql b/SqlServer.2017/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2017).sql index 6a8482bb298f..d49f09b83b89 100644 --- a/SqlServer.2017/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2017).sql +++ b/SqlServer.2017/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2017).sql @@ -1,204 +1,259 @@ -- SqlServer.2017 -select @@version - --- SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestData].[dbo].[TableTypeTestProc] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[PersonSearch] -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -214,57 +269,49 @@ EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +325,33 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +365,81 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestData].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - --- SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2017/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2017).sql b/SqlServer.2017/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2017).sql index 6a8482bb298f..d49f09b83b89 100644 --- a/SqlServer.2017/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2017).sql +++ b/SqlServer.2017/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2017).sql @@ -1,204 +1,259 @@ -- SqlServer.2017 -select @@version - --- SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestData].[dbo].[TableTypeTestProc] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[PersonSearch] -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -214,57 +269,49 @@ EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +325,33 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +365,81 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestData].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - --- SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2017/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2017).sql b/SqlServer.2017/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2017).sql index 765f442356e2..ab40ed2e6a04 100644 --- a/SqlServer.2017/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2017).sql +++ b/SqlServer.2017/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2017).sql @@ -67,205 +67,260 @@ CREATE TABLE TemporalTable4 -- SqlServer.2017 -select @@version - --- SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestData].[dbo].[TableTypeTestProc] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[PersonSearch] -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -281,57 +336,49 @@ EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -345,33 +392,33 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -385,77 +432,81 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestData].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - --- SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2017/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2017).sql b/SqlServer.2017/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2017).sql index 28a7dfbec8cc..8790a014498d 100644 --- a/SqlServer.2017/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2017).sql +++ b/SqlServer.2017/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2017).sql @@ -67,206 +67,263 @@ CREATE TABLE TemporalTable4 -- SqlServer.2017 -select @@version - --- SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - (t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [o].[object_id] = [a_Table].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL - ) AND t.temporal_type <> 1 + [o].[is_ms_shipped] = 0 AND + [o].[type] IN (N'U', N'V') AND + ([a_Table].[object_id] IS NULL OR [a_Table].[temporal_type] <> 1 OR [a_Table].[temporal_type] IS NULL) AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestData].[dbo].[TableTypeTestProc] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[PersonSearch] -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -282,57 +339,49 @@ EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -346,33 +395,33 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -386,77 +435,81 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestData].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - --- SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2017/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2017).sql b/SqlServer.2017/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2017).sql index 6a8482bb298f..d49f09b83b89 100644 --- a/SqlServer.2017/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2017).sql +++ b/SqlServer.2017/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2017).sql @@ -1,204 +1,259 @@ -- SqlServer.2017 -select @@version - --- SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestData].[dbo].[TableTypeTestProc] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[PersonSearch] -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -214,57 +269,49 @@ EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +325,33 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +365,81 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestData].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - --- SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2017/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2017).sql b/SqlServer.2017/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2017).sql index e4d10b74ba1a..dd780ebee034 100644 --- a/SqlServer.2017/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2017).sql +++ b/SqlServer.2017/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2017).sql @@ -1,204 +1,259 @@ -- SqlServer.2017 -select @@version - --- SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestData].[dbo].[TableTypeTestProc] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[PersonSearch] -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -214,57 +269,49 @@ EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +325,33 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +365,81 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestData].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - --- SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -397,335 +448,437 @@ sp_describe_first_result_set RollbackTransaction -- SqlServer.2017 -select @@version - --- SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2017 -select @@version - --- SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2017/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2017).sql b/SqlServer.2017/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2017).sql index e4d10b74ba1a..dd780ebee034 100644 --- a/SqlServer.2017/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2017).sql +++ b/SqlServer.2017/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2017).sql @@ -1,204 +1,259 @@ -- SqlServer.2017 -select @@version - --- SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestData].[dbo].[TableTypeTestProc] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[PersonSearch] -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -214,57 +269,49 @@ EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +325,33 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +365,81 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestData].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - --- SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -397,335 +448,437 @@ sp_describe_first_result_set RollbackTransaction -- SqlServer.2017 -select @@version - --- SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2017 -select @@version - --- SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2017/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2017).sql b/SqlServer.2017/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2017).sql index 3f990993dcf9..3745f89c2661 100644 --- a/SqlServer.2017/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2017).sql +++ b/SqlServer.2017/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2017).sql @@ -7,237 +7,312 @@ FROM -- SqlServer.2017 -select @@version - --- SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestData].[dbo].[TableTypeTestProc] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2017 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output int' -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -245,7 +320,7 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -253,9 +328,9 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -277,31 +352,31 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -309,49 +384,37 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestData].[dbo].[VariableResults] -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set --- SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -363,30 +426,18 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - RollbackTransaction diff --git a/SqlServer.2017/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2017).sql b/SqlServer.2017/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2017).sql index f0b6bfd0a34e..2a0e18267a52 100644 --- a/SqlServer.2017/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2017).sql +++ b/SqlServer.2017/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2017).sql @@ -1,122 +1,162 @@ -- SqlServer.2017 -select @@version - --- SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -[TestData].[dbo].[AddIssue792Record] +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2017 -[TestData].[dbo].[DuplicateColumnNames] +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2017 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') + +-- SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] + +-- SqlServer.2017 + +[TestData].[dbo].[Issue1897] + +-- SqlServer.2017 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2017 DECLARE @input Int -- Int32 SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2017 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2017 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Issue1897] +[TestData].[dbo].[ExecuteProcIntParameters] -- SqlServer.2017 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +[TestData].[dbo].[ExecuteProcStringParameters] -- SqlServer.2017 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestData].[dbo].[OutRefEnumTest] +[TestData].[dbo].[Person_SelectByKey] -- SqlServer.2017 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[Person_SelectByKeyLowercase] -- SqlServer.2017 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[Person_SelectAll] -- SqlServer.2017 DECLARE @firstName NVarChar(50) -- String @@ -124,13 +164,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +[TestData].[dbo].[Person_SelectByName] -- SqlServer.2017 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[Person_SelectListByName] -- SqlServer.2017 DECLARE @FirstName NVarChar(50) -- String @@ -158,38 +200,6 @@ SET @PersonID = 0 [TestData].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2017 - -[TestData].[dbo].[Person_SelectAll] - --- SqlServer.2017 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKey] - --- SqlServer.2017 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2017 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectByName] - --- SqlServer.2017 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectListByName] - -- SqlServer.2017 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -205,62 +215,72 @@ SET @Gender = char(0) [TestData].[dbo].[Person_Update] -- SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[PersonSearch] +[TestData].[dbo].[Person_Delete] -- SqlServer.2017 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2017 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[VariableResults] -- SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[dbo].[TableTypeTestProc] +[TestData].[dbo].[OutRefTest] -- SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[dbo].[VariableResults] +[TestData].[dbo].[OutRefEnumTest] -- SqlServer.2017 -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2017 -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[SelectImplicitColumn] + +-- SqlServer.2017 + +[TestData].[dbo].[DuplicateColumnNames] -RollbackTransaction -- SqlServer.2017 -select @@version +[TestData].[dbo].[AddIssue792Record] +RollbackTransaction -- SqlServer.2017 SELECT compatibility_level FROM sys.databases WHERE name = db_name() @@ -268,84 +288,116 @@ SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestData].[dbo].[TableTypeTestProc] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[PersonSearch] -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -361,57 +413,49 @@ EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -425,33 +469,33 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -465,77 +509,81 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestData].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - --- SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2017/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2017).sql b/SqlServer.2017/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2017).sql index 3f990993dcf9..3745f89c2661 100644 --- a/SqlServer.2017/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2017).sql +++ b/SqlServer.2017/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2017).sql @@ -7,237 +7,312 @@ FROM -- SqlServer.2017 -select @@version - --- SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestData].[dbo].[TableTypeTestProc] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2017 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output int' -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -245,7 +320,7 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -253,9 +328,9 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -277,31 +352,31 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -309,49 +384,37 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestData].[dbo].[VariableResults] -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set --- SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -363,30 +426,18 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - RollbackTransaction diff --git a/SqlServer.2017/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2017).sql b/SqlServer.2017/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2017).sql index 6a8482bb298f..d49f09b83b89 100644 --- a/SqlServer.2017/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2017).sql +++ b/SqlServer.2017/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2017).sql @@ -1,204 +1,259 @@ -- SqlServer.2017 -select @@version - --- SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestData].[dbo].[TableTypeTestProc] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[PersonSearch] -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -214,57 +269,49 @@ EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +325,33 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +365,81 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestData].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - --- SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2017/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2017).sql b/SqlServer.2017/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2017).sql index 6a8482bb298f..d49f09b83b89 100644 --- a/SqlServer.2017/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2017).sql +++ b/SqlServer.2017/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2017).sql @@ -1,204 +1,259 @@ -- SqlServer.2017 -select @@version - --- SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestData].[dbo].[TableTypeTestProc] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[PersonSearch] -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -214,57 +269,49 @@ EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +325,33 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +365,81 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestData].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - --- SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2017/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2017).sql b/SqlServer.2017/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2017).sql index 6a8482bb298f..d49f09b83b89 100644 --- a/SqlServer.2017/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2017).sql +++ b/SqlServer.2017/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2017).sql @@ -1,204 +1,259 @@ -- SqlServer.2017 -select @@version - --- SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2017 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2017 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestData].[dbo].[TableTypeTestProc] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[PersonSearch] -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -214,57 +269,49 @@ EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +325,33 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +365,81 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestData].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - --- SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2017/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2017).sql b/SqlServer.2017/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2017).sql index 32bed4b48c7a..21bdd8143671 100644 --- a/SqlServer.2017/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2017).sql +++ b/SqlServer.2017/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2017).sql @@ -7,9 +7,5 @@ FROM -- SqlServer.2017 -select @@version - --- SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() diff --git a/SqlServer.2017/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2017).sql b/SqlServer.2017/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2017).sql index c4ebd8dd37fb..4aada14da1a7 100644 --- a/SqlServer.2017/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2017).sql +++ b/SqlServer.2017/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2017).sql @@ -14,125 +14,173 @@ FROM -- SqlServer.2017 -select @@version - --- SqlServer.2017 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestData].[dbo].[TableTypeTestProc] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set +-- SqlServer.2017 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2017 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2017 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output int' -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -140,7 +188,7 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -148,9 +196,9 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -172,31 +220,31 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -204,49 +252,37 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestData].[dbo].[VariableResults] -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set --- SqlServer.2017 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2017 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String @@ -258,32 +294,20 @@ sp_describe_first_result_set -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2017 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2017 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set --- SqlServer.2017 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestData].[dbo].[VariableResults] - RollbackTransaction -- SqlServer.2017 diff --git a/SqlServer.2019.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2019.MS).sql b/SqlServer.2019.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2019.MS).sql index d45ccd1c06f1..9a10d3befdcc 100644 --- a/SqlServer.2019.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2019.MS).sql +++ b/SqlServer.2019.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2019.MS).sql @@ -1,70 +1,86 @@ -- SqlServer.2019.MS SqlServer.2019 -select @@version - --- SqlServer.2019.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -84,41 +100,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') - -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -126,7 +126,7 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -134,9 +134,9 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -158,31 +158,31 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -190,53 +190,57 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -258,28 +262,48 @@ SET @table = NULL -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.2019.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2019.MS).sql b/SqlServer.2019.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2019.MS).sql index 9e7d9765e171..28d8270d188d 100644 --- a/SqlServer.2019.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2019.MS).sql +++ b/SqlServer.2019.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2019.MS).sql @@ -1,182 +1,225 @@ -- SqlServer.2019.MS SqlServer.2019 -select @@version - --- SqlServer.2019.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') - -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.2019.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2019.MS).sql b/SqlServer.2019.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2019.MS).sql index 9e7d9765e171..28d8270d188d 100644 --- a/SqlServer.2019.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2019.MS).sql +++ b/SqlServer.2019.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2019.MS).sql @@ -1,182 +1,225 @@ -- SqlServer.2019.MS SqlServer.2019 -select @@version - --- SqlServer.2019.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') - -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.2019.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2019.MS).sql b/SqlServer.2019.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2019.MS).sql index 4fc5d8d29a6e..e106827a3173 100644 --- a/SqlServer.2019.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2019.MS).sql +++ b/SqlServer.2019.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2019.MS).sql @@ -67,183 +67,226 @@ CREATE TABLE TemporalTable4 -- SqlServer.2019.MS SqlServer.2019 -select @@version - --- SqlServer.2019.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -263,41 +306,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') - -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -305,7 +332,7 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -313,9 +340,9 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -337,31 +364,31 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -369,53 +396,57 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -437,30 +468,50 @@ SET @table = NULL -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction -- SqlServer.2019.MS SqlServer.2019 diff --git a/SqlServer.2019.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2019.MS).sql b/SqlServer.2019.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2019.MS).sql index 1ac14a8e609c..d6c1d546cbe5 100644 --- a/SqlServer.2019.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2019.MS).sql +++ b/SqlServer.2019.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2019.MS).sql @@ -67,184 +67,229 @@ CREATE TABLE TemporalTable4 -- SqlServer.2019.MS SqlServer.2019 -select @@version - --- SqlServer.2019.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - (t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [o].[object_id] = [a_Table].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL - ) AND t.temporal_type <> 1 + [o].[is_ms_shipped] = 0 AND + [o].[type] IN (N'U', N'V') AND + ([a_Table].[object_id] IS NULL OR [a_Table].[temporal_type] <> 1 OR [a_Table].[temporal_type] IS NULL) AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -264,41 +309,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') - -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -306,7 +335,7 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -314,9 +343,9 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -338,31 +367,31 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -370,53 +399,57 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -438,30 +471,50 @@ SET @table = NULL -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction -- SqlServer.2019.MS SqlServer.2019 diff --git a/SqlServer.2019.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2019.MS).sql b/SqlServer.2019.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2019.MS).sql index 9e7d9765e171..28d8270d188d 100644 --- a/SqlServer.2019.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2019.MS).sql +++ b/SqlServer.2019.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2019.MS).sql @@ -1,182 +1,225 @@ -- SqlServer.2019.MS SqlServer.2019 -select @@version - --- SqlServer.2019.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') - -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.2019.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2019.MS).sql b/SqlServer.2019.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2019.MS).sql index 7a8b414480e2..7b964239f573 100644 --- a/SqlServer.2019.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2019.MS).sql +++ b/SqlServer.2019.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2019.MS).sql @@ -1,182 +1,225 @@ -- SqlServer.2019.MS SqlServer.2019 -select @@version - --- SqlServer.2019.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') - -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,362 +401,484 @@ SET @table = NULL -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -RollbackTransaction -- SqlServer.2019.MS SqlServer.2019 -select @@version +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' -SELECT compatibility_level FROM sys.databases WHERE name = db_name() +sp_describe_first_result_set +RollbackTransaction -- SqlServer.2019.MS SqlServer.2019 +SELECT compatibility_level FROM sys.databases WHERE name = db_name() + +-- SqlServer.2019.MS SqlServer.2019 SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2019.MS SqlServer.2019 -select @@version - --- SqlServer.2019.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2019.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2019.MS).sql b/SqlServer.2019.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2019.MS).sql index 7a8b414480e2..7b964239f573 100644 --- a/SqlServer.2019.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2019.MS).sql +++ b/SqlServer.2019.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2019.MS).sql @@ -1,182 +1,225 @@ -- SqlServer.2019.MS SqlServer.2019 -select @@version - --- SqlServer.2019.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') - -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,362 +401,484 @@ SET @table = NULL -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -RollbackTransaction -- SqlServer.2019.MS SqlServer.2019 -select @@version +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' -SELECT compatibility_level FROM sys.databases WHERE name = db_name() +sp_describe_first_result_set +RollbackTransaction -- SqlServer.2019.MS SqlServer.2019 +SELECT compatibility_level FROM sys.databases WHERE name = db_name() + +-- SqlServer.2019.MS SqlServer.2019 SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2019.MS SqlServer.2019 -select @@version - --- SqlServer.2019.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2019.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2019.MS).sql b/SqlServer.2019.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2019.MS).sql index bdcf58b1382d..d5fc8dd1c37a 100644 --- a/SqlServer.2019.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2019.MS).sql +++ b/SqlServer.2019.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2019.MS).sql @@ -7,183 +7,226 @@ FROM -- SqlServer.2019.MS SqlServer.2019 -select @@version - --- SqlServer.2019.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -203,41 +246,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') - -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -245,7 +272,7 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -253,9 +280,9 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -277,31 +304,31 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -309,53 +336,57 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -377,16 +408,36 @@ SET @table = NULL -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMS].[dbo].[VariableResults] +[TestDataMS].[dbo].[PersonSearch] + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' + +sp_describe_first_result_set + +-- SqlServer.2019.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set RollbackTransaction diff --git a/SqlServer.2019.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2019.MS).sql b/SqlServer.2019.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2019.MS).sql index 6d2b63376dc7..cea1c5a675de 100644 --- a/SqlServer.2019.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2019.MS).sql +++ b/SqlServer.2019.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2019.MS).sql @@ -1,64 +1,92 @@ -- SqlServer.2019.MS SqlServer.2019 -select @@version - --- SqlServer.2019.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019.MS SqlServer.2019 - -[TestDataMS].[dbo].[AddIssue792Record] + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMS].[dbo].[DuplicateColumnNames] +[TestDataMS].[dbo].[QueryProcMultipleParameters] -- SqlServer.2019.MS SqlServer.2019 DECLARE @input Int -- Int32 @@ -77,46 +105,20 @@ SET @output = 0 [TestDataMS].[dbo].[ExecuteProcStringParameters] -- SqlServer.2019.MS SqlServer.2019 +DECLARE @id Int -- Int32 +SET @id = 0 -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') - --- SqlServer.2019.MS SqlServer.2019 - -[TestDataMS].[dbo].[Issue1897] - --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' - -[TestDataMS].[dbo].[OutRefEnumTest] +[TestDataMS].[dbo].[Person_SelectByKey] -- SqlServer.2019.MS SqlServer.2019 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[Person_SelectByKeyLowercase] -- SqlServer.2019.MS SqlServer.2019 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[Person_SelectAll] -- SqlServer.2019.MS SqlServer.2019 DECLARE @firstName NVarChar(50) -- String @@ -124,13 +126,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +[TestDataMS].[dbo].[Person_SelectByName] -- SqlServer.2019.MS SqlServer.2019 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2019.MS SqlServer.2019 DECLARE @FirstName NVarChar(50) -- String @@ -159,20 +163,28 @@ SET @PersonID = 0 [TestDataMS].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2019.MS SqlServer.2019 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestDataMS].[dbo].[Person_SelectAll] +[TestDataMS].[dbo].[Person_Update] -- SqlServer.2019.MS SqlServer.2019 -DECLARE @id Int -- Int32 -SET @id = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[Person_SelectByKey] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2019.MS SqlServer.2019 -DECLARE @id Int -- Int32 -SET @id = 0 -[TestDataMS].[dbo].[Person_SelectByKeyLowercase] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2019.MS SqlServer.2019 DECLARE @firstName NVarChar(50) -- String @@ -180,61 +192,55 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Person_SelectByName] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2019.MS SqlServer.2019 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[Person_SelectListByName] +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2019.MS SqlServer.2019 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[dbo].[Person_Update] +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2019.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[dbo].[PersonSearch] +[TestDataMS].[dbo].[OutRefEnumTest] -- SqlServer.2019.MS SqlServer.2019 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 -[TestDataMS].[dbo].[QueryProcMultipleParameters] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2019.MS SqlServer.2019 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2019.MS SqlServer.2019 -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[DuplicateColumnNames] + +-- SqlServer.2019.MS SqlServer.2019 + +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2019.MS SqlServer.2019 DECLARE @table [dbo].[TestTableType] -- Structured -- Object @@ -243,87 +249,121 @@ SET @table = NULL [TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2019.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2019.MS SqlServer.2019 EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[PersonSearch] -RollbackTransaction -- SqlServer.2019.MS SqlServer.2019 -select @@version +[TestDataMS].[dbo].[Issue1897] -- SqlServer.2019.MS SqlServer.2019 -SELECT compatibility_level FROM sys.databases WHERE name = db_name() +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2019.MS SqlServer.2019 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description -FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME +[TestDataMS].[dbo].[QueryProcParameters] + +RollbackTransaction +-- SqlServer.2019.MS SqlServer.2019 + +SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' -sp_describe_first_result_set +SELECT + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -343,41 +383,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') - -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -385,7 +409,7 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -393,9 +417,9 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -417,31 +441,31 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -449,53 +473,57 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -517,28 +545,48 @@ SET @table = NULL -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.2019.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2019.MS).sql b/SqlServer.2019.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2019.MS).sql index bdcf58b1382d..d5fc8dd1c37a 100644 --- a/SqlServer.2019.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2019.MS).sql +++ b/SqlServer.2019.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2019.MS).sql @@ -7,183 +7,226 @@ FROM -- SqlServer.2019.MS SqlServer.2019 -select @@version - --- SqlServer.2019.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -203,41 +246,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') - -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -245,7 +272,7 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -253,9 +280,9 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -277,31 +304,31 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -309,53 +336,57 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -377,16 +408,36 @@ SET @table = NULL -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMS].[dbo].[VariableResults] +[TestDataMS].[dbo].[PersonSearch] + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' + +sp_describe_first_result_set + +-- SqlServer.2019.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set RollbackTransaction diff --git a/SqlServer.2019.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2019.MS).sql b/SqlServer.2019.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2019.MS).sql index 9e7d9765e171..28d8270d188d 100644 --- a/SqlServer.2019.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2019.MS).sql +++ b/SqlServer.2019.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2019.MS).sql @@ -1,182 +1,225 @@ -- SqlServer.2019.MS SqlServer.2019 -select @@version - --- SqlServer.2019.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') - -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.2019.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2019.MS).sql b/SqlServer.2019.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2019.MS).sql index 9e7d9765e171..28d8270d188d 100644 --- a/SqlServer.2019.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2019.MS).sql +++ b/SqlServer.2019.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2019.MS).sql @@ -1,182 +1,225 @@ -- SqlServer.2019.MS SqlServer.2019 -select @@version - --- SqlServer.2019.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') - -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.2019.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2019.MS).sql b/SqlServer.2019.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2019.MS).sql index 9e7d9765e171..28d8270d188d 100644 --- a/SqlServer.2019.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2019.MS).sql +++ b/SqlServer.2019.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2019.MS).sql @@ -1,182 +1,225 @@ -- SqlServer.2019.MS SqlServer.2019 -select @@version - --- SqlServer.2019.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') - -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.2019.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2019.MS).sql b/SqlServer.2019.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2019.MS).sql index ec34e5527d4b..d00025e8680e 100644 --- a/SqlServer.2019.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2019.MS).sql +++ b/SqlServer.2019.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2019.MS).sql @@ -7,9 +7,5 @@ FROM -- SqlServer.2019.MS SqlServer.2019 -select @@version - --- SqlServer.2019.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() diff --git a/SqlServer.2019.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2019.MS).sql b/SqlServer.2019.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2019.MS).sql index d1d3d749b8f6..0850da6ee262 100644 --- a/SqlServer.2019.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2019.MS).sql +++ b/SqlServer.2019.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2019.MS).sql @@ -14,71 +14,87 @@ FROM -- SqlServer.2019.MS SqlServer.2019 -select @@version - --- SqlServer.2019.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -98,41 +114,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') - --- SqlServer.2019.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') - -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -140,7 +140,7 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -148,9 +148,9 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -172,31 +172,31 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -204,53 +204,57 @@ sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMS].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -272,17 +276,37 @@ SET @table = NULL -- SqlServer.2019.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2019.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMS].[dbo].[VariableResults] +[TestDataMS].[dbo].[PersonSearch] + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' + +sp_describe_first_result_set + +-- SqlServer.2019.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + +-- SqlServer.2019.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set RollbackTransaction -- SqlServer.2019.MS SqlServer.2019 diff --git a/SqlServer.2019/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2019).sql b/SqlServer.2019/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2019).sql index bb1c345c96b5..b987ad1c14b3 100644 --- a/SqlServer.2019/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2019).sql +++ b/SqlServer.2019/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2019).sql @@ -1,70 +1,86 @@ -- SqlServer.2019 -select @@version - --- SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -84,41 +100,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') - -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -126,7 +126,7 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -134,9 +134,9 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -158,31 +158,31 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -190,53 +190,57 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -258,28 +262,48 @@ SET @table = NULL -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2019 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + +-- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.2019/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2019).sql b/SqlServer.2019/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2019).sql index f19a23b01ae0..5e8242c0eebf 100644 --- a/SqlServer.2019/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2019).sql +++ b/SqlServer.2019/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2019).sql @@ -1,182 +1,225 @@ -- SqlServer.2019 -select @@version - --- SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') - -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2019 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + +-- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.2019/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2019).sql b/SqlServer.2019/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2019).sql index f19a23b01ae0..5e8242c0eebf 100644 --- a/SqlServer.2019/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2019).sql +++ b/SqlServer.2019/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2019).sql @@ -1,182 +1,225 @@ -- SqlServer.2019 -select @@version - --- SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') - -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2019 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + +-- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.2019/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2019).sql b/SqlServer.2019/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2019).sql index 7d0da6e24fef..cb3de81bfdaa 100644 --- a/SqlServer.2019/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2019).sql +++ b/SqlServer.2019/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2019).sql @@ -67,183 +67,226 @@ CREATE TABLE TemporalTable4 -- SqlServer.2019 -select @@version - --- SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -263,41 +306,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') - -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -305,7 +332,7 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -313,9 +340,9 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -337,31 +364,31 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -369,53 +396,57 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -437,30 +468,50 @@ SET @table = NULL -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2019 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + +-- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction -- SqlServer.2019 diff --git a/SqlServer.2019/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2019).sql b/SqlServer.2019/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2019).sql index cba7ec6f93e3..3262c4bb33af 100644 --- a/SqlServer.2019/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2019).sql +++ b/SqlServer.2019/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2019).sql @@ -67,184 +67,229 @@ CREATE TABLE TemporalTable4 -- SqlServer.2019 -select @@version - --- SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - (t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [o].[object_id] = [a_Table].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL - ) AND t.temporal_type <> 1 + [o].[is_ms_shipped] = 0 AND + [o].[type] IN (N'U', N'V') AND + ([a_Table].[object_id] IS NULL OR [a_Table].[temporal_type] <> 1 OR [a_Table].[temporal_type] IS NULL) AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -264,41 +309,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') - -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -306,7 +335,7 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -314,9 +343,9 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -338,31 +367,31 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -370,53 +399,57 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -438,30 +471,50 @@ SET @table = NULL -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2019 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + +-- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction -- SqlServer.2019 diff --git a/SqlServer.2019/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2019).sql b/SqlServer.2019/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2019).sql index f19a23b01ae0..5e8242c0eebf 100644 --- a/SqlServer.2019/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2019).sql +++ b/SqlServer.2019/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2019).sql @@ -1,182 +1,225 @@ -- SqlServer.2019 -select @@version - --- SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') - -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2019 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + +-- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.2019/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2019).sql b/SqlServer.2019/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2019).sql index 970763f34323..88a2e8a57e46 100644 --- a/SqlServer.2019/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2019).sql +++ b/SqlServer.2019/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2019).sql @@ -1,182 +1,225 @@ -- SqlServer.2019 -select @@version - --- SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') - -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,362 +401,484 @@ SET @table = NULL -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -RollbackTransaction -- SqlServer.2019 -select @@version +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' -SELECT compatibility_level FROM sys.databases WHERE name = db_name() +sp_describe_first_result_set +RollbackTransaction -- SqlServer.2019 +SELECT compatibility_level FROM sys.databases WHERE name = db_name() + +-- SqlServer.2019 SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2019 -select @@version - --- SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2019/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2019).sql b/SqlServer.2019/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2019).sql index 970763f34323..88a2e8a57e46 100644 --- a/SqlServer.2019/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2019).sql +++ b/SqlServer.2019/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2019).sql @@ -1,182 +1,225 @@ -- SqlServer.2019 -select @@version - --- SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') - -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,362 +401,484 @@ SET @table = NULL -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -RollbackTransaction -- SqlServer.2019 -select @@version +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' -SELECT compatibility_level FROM sys.databases WHERE name = db_name() +sp_describe_first_result_set +RollbackTransaction -- SqlServer.2019 +SELECT compatibility_level FROM sys.databases WHERE name = db_name() + +-- SqlServer.2019 SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2019 -select @@version - --- SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2019/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2019).sql b/SqlServer.2019/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2019).sql index 062786b1839a..a90370141ca6 100644 --- a/SqlServer.2019/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2019).sql +++ b/SqlServer.2019/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2019).sql @@ -7,183 +7,226 @@ FROM -- SqlServer.2019 -select @@version - --- SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -203,41 +246,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') - -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -245,7 +272,7 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -253,9 +280,9 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -277,31 +304,31 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -309,53 +336,57 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -377,16 +408,36 @@ SET @table = NULL -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestData].[dbo].[VariableResults] +[TestData].[dbo].[PersonSearch] + +-- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' + +sp_describe_first_result_set + +-- SqlServer.2019 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + +-- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set RollbackTransaction diff --git a/SqlServer.2019/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2019).sql b/SqlServer.2019/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2019).sql index e18f584e24f9..368601ea36b8 100644 --- a/SqlServer.2019/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2019).sql +++ b/SqlServer.2019/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2019).sql @@ -1,64 +1,92 @@ -- SqlServer.2019 -select @@version - --- SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019 - -[TestData].[dbo].[AddIssue792Record] + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[DuplicateColumnNames] +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2019 DECLARE @input Int -- Int32 @@ -77,46 +105,20 @@ SET @output = 0 [TestData].[dbo].[ExecuteProcStringParameters] -- SqlServer.2019 +DECLARE @id Int -- Int32 +SET @id = 0 -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') - --- SqlServer.2019 - -[TestData].[dbo].[Issue1897] - --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') - --- SqlServer.2019 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' - -[TestData].[dbo].[OutRefEnumTest] +[TestData].[dbo].[Person_SelectByKey] -- SqlServer.2019 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[Person_SelectByKeyLowercase] -- SqlServer.2019 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[Person_SelectAll] -- SqlServer.2019 DECLARE @firstName NVarChar(50) -- String @@ -124,13 +126,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +[TestData].[dbo].[Person_SelectByName] -- SqlServer.2019 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[Person_SelectListByName] -- SqlServer.2019 DECLARE @FirstName NVarChar(50) -- String @@ -159,20 +163,28 @@ SET @PersonID = 0 [TestData].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2019 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestData].[dbo].[Person_SelectAll] +[TestData].[dbo].[Person_Update] -- SqlServer.2019 -DECLARE @id Int -- Int32 -SET @id = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[Person_SelectByKey] +[TestData].[dbo].[Person_Delete] -- SqlServer.2019 -DECLARE @id Int -- Int32 -SET @id = 0 -[TestData].[dbo].[Person_SelectByKeyLowercase] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2019 DECLARE @firstName NVarChar(50) -- String @@ -180,61 +192,55 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestData].[dbo].[Person_SelectByName] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2019 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -[TestData].[dbo].[Person_SelectListByName] +[TestData].[dbo].[VariableResults] -- SqlServer.2019 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[dbo].[Person_Update] +[TestData].[dbo].[OutRefTest] -- SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[dbo].[PersonSearch] +[TestData].[dbo].[OutRefEnumTest] -- SqlServer.2019 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 -[TestData].[dbo].[QueryProcMultipleParameters] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2019 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2019 -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[DuplicateColumnNames] + +-- SqlServer.2019 + +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2019 DECLARE @table [dbo].[TestTableType] -- Structured -- Object @@ -243,87 +249,121 @@ SET @table = NULL [TestData].[dbo].[TableTypeTestProc] -- SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2019 EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[PersonSearch] -RollbackTransaction -- SqlServer.2019 -select @@version +[TestData].[dbo].[Issue1897] -- SqlServer.2019 -SELECT compatibility_level FROM sys.databases WHERE name = db_name() +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2019 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description -FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME +[TestData].[dbo].[QueryProcParameters] + +RollbackTransaction +-- SqlServer.2019 + +SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' -sp_describe_first_result_set +SELECT + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -343,41 +383,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') - -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -385,7 +409,7 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -393,9 +417,9 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -417,31 +441,31 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -449,53 +473,57 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -517,28 +545,48 @@ SET @table = NULL -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2019 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + +-- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.2019/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2019).sql b/SqlServer.2019/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2019).sql index 062786b1839a..a90370141ca6 100644 --- a/SqlServer.2019/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2019).sql +++ b/SqlServer.2019/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2019).sql @@ -7,183 +7,226 @@ FROM -- SqlServer.2019 -select @@version - --- SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -203,41 +246,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') - -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -245,7 +272,7 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -253,9 +280,9 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -277,31 +304,31 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -309,53 +336,57 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -377,16 +408,36 @@ SET @table = NULL -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestData].[dbo].[VariableResults] +[TestData].[dbo].[PersonSearch] + +-- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' + +sp_describe_first_result_set + +-- SqlServer.2019 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + +-- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set RollbackTransaction diff --git a/SqlServer.2019/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2019).sql b/SqlServer.2019/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2019).sql index f19a23b01ae0..5e8242c0eebf 100644 --- a/SqlServer.2019/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2019).sql +++ b/SqlServer.2019/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2019).sql @@ -1,182 +1,225 @@ -- SqlServer.2019 -select @@version - --- SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') - -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2019 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + +-- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.2019/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2019).sql b/SqlServer.2019/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2019).sql index f19a23b01ae0..5e8242c0eebf 100644 --- a/SqlServer.2019/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2019).sql +++ b/SqlServer.2019/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2019).sql @@ -1,182 +1,225 @@ -- SqlServer.2019 -select @@version - --- SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') - -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2019 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + +-- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.2019/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2019).sql b/SqlServer.2019/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2019).sql index f19a23b01ae0..5e8242c0eebf 100644 --- a/SqlServer.2019/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2019).sql +++ b/SqlServer.2019/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2019).sql @@ -1,182 +1,225 @@ -- SqlServer.2019 -select @@version - --- SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') - -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestData].[dbo].[PersonSearch] -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.2019 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + +-- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.2019/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2019).sql b/SqlServer.2019/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2019).sql index 618d16ce03a1..7557413943a9 100644 --- a/SqlServer.2019/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2019).sql +++ b/SqlServer.2019/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2019).sql @@ -7,9 +7,5 @@ FROM -- SqlServer.2019 -select @@version - --- SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() diff --git a/SqlServer.2019/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2019).sql b/SqlServer.2019/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2019).sql index 1594b8a36507..f22c201e00ec 100644 --- a/SqlServer.2019/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2019).sql +++ b/SqlServer.2019/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2019).sql @@ -14,71 +14,87 @@ FROM -- SqlServer.2019 -select @@version - --- SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -98,41 +114,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') - --- SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.2019 - -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') - -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -140,7 +140,7 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -148,9 +148,9 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -172,31 +172,31 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -204,53 +204,57 @@ sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestData].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -272,17 +276,37 @@ SET @table = NULL -- SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestData].[dbo].[VariableResults] +[TestData].[dbo].[PersonSearch] + +-- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' + +sp_describe_first_result_set + +-- SqlServer.2019 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + +-- SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set RollbackTransaction -- SqlServer.2019 diff --git a/SqlServer.2022.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2022.MS).sql b/SqlServer.2022.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2022.MS).sql index 8bf9c498f3b5..b5bcc4f1ceaa 100644 --- a/SqlServer.2022.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2022.MS).sql +++ b/SqlServer.2022.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2022.MS).sql @@ -1,56 +1,80 @@ -- SqlServer.2022.MS SqlServer.2022 -select @@version - --- SqlServer.2022.MS SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -62,97 +86,101 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2022.MS SqlServer.2022 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -166,33 +194,33 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -206,77 +234,73 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set --- SqlServer.2022.MS SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2022.MS SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -[TestDataMS].[dbo].[TableTypeTestProc] +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2022.MS SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2022.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2022.MS).sql b/SqlServer.2022.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2022.MS).sql index 4917293613c3..77214476d51d 100644 --- a/SqlServer.2022.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2022.MS).sql +++ b/SqlServer.2022.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2022.MS).sql @@ -1,168 +1,219 @@ -- SqlServer.2022.MS SqlServer.2022 -select @@version - --- SqlServer.2022.MS SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -174,97 +225,101 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2022.MS SqlServer.2022 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +333,33 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +373,73 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set --- SqlServer.2022.MS SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2022.MS SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -[TestDataMS].[dbo].[TableTypeTestProc] +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2022.MS SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2022.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2022.MS).sql b/SqlServer.2022.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2022.MS).sql index 4917293613c3..77214476d51d 100644 --- a/SqlServer.2022.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2022.MS).sql +++ b/SqlServer.2022.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2022.MS).sql @@ -1,168 +1,219 @@ -- SqlServer.2022.MS SqlServer.2022 -select @@version - --- SqlServer.2022.MS SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -174,97 +225,101 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2022.MS SqlServer.2022 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +333,33 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +373,73 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set --- SqlServer.2022.MS SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2022.MS SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -[TestDataMS].[dbo].[TableTypeTestProc] +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2022.MS SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2022.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2022.MS).sql b/SqlServer.2022.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2022.MS).sql index 796afebf0b69..1dcf26d20aa1 100644 --- a/SqlServer.2022.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2022.MS).sql +++ b/SqlServer.2022.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2022.MS).sql @@ -67,169 +67,220 @@ CREATE TABLE TemporalTable4 -- SqlServer.2022.MS SqlServer.2022 -select @@version - --- SqlServer.2022.MS SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -241,97 +292,101 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2022.MS SqlServer.2022 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -345,33 +400,33 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -385,77 +440,73 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set --- SqlServer.2022.MS SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2022.MS SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -[TestDataMS].[dbo].[TableTypeTestProc] +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2022.MS SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2022.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2022.MS).sql b/SqlServer.2022.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2022.MS).sql index b247d9824fb9..50d1ec927e66 100644 --- a/SqlServer.2022.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2022.MS).sql +++ b/SqlServer.2022.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2022.MS).sql @@ -67,170 +67,223 @@ CREATE TABLE TemporalTable4 -- SqlServer.2022.MS SqlServer.2022 -select @@version - --- SqlServer.2022.MS SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - (t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [o].[object_id] = [a_Table].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL - ) AND t.temporal_type <> 1 + [o].[is_ms_shipped] = 0 AND + [o].[type] IN (N'U', N'V') AND + ([a_Table].[object_id] IS NULL OR [a_Table].[temporal_type] <> 1 OR [a_Table].[temporal_type] IS NULL) AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -242,97 +295,101 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2022.MS SqlServer.2022 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -346,33 +403,33 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -386,77 +443,73 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set --- SqlServer.2022.MS SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2022.MS SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -[TestDataMS].[dbo].[TableTypeTestProc] +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2022.MS SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2022.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2022.MS).sql b/SqlServer.2022.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2022.MS).sql index 4917293613c3..77214476d51d 100644 --- a/SqlServer.2022.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2022.MS).sql +++ b/SqlServer.2022.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2022.MS).sql @@ -1,168 +1,219 @@ -- SqlServer.2022.MS SqlServer.2022 -select @@version - --- SqlServer.2022.MS SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -174,97 +225,101 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2022.MS SqlServer.2022 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +333,33 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +373,73 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set --- SqlServer.2022.MS SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2022.MS SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -[TestDataMS].[dbo].[TableTypeTestProc] +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2022.MS SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2022.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2022.MS).sql b/SqlServer.2022.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2022.MS).sql index 047c7722bb52..b85b67edbc97 100644 --- a/SqlServer.2022.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2022.MS).sql +++ b/SqlServer.2022.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2022.MS).sql @@ -1,168 +1,219 @@ -- SqlServer.2022.MS SqlServer.2022 -select @@version - --- SqlServer.2022.MS SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -174,111 +225,99 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') - --- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String SET @params = N'@id int' @@ -286,9 +325,9 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set @@ -310,45 +349,39 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set --- SqlServer.2022.MS SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +389,12 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2022.MS SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' @@ -383,349 +410,475 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2022.MS SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' + +sp_describe_first_result_set + +-- SqlServer.2022.MS SqlServer.2022 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') + +-- SqlServer.2022.MS SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -RollbackTransaction -- SqlServer.2022.MS SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -select @@version +sp_describe_first_result_set +RollbackTransaction -- SqlServer.2022.MS SqlServer.2022 SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2022.MS SqlServer.2022 -select @@version - --- SqlServer.2022.MS SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2022.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2022.MS).sql b/SqlServer.2022.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2022.MS).sql index 047c7722bb52..b85b67edbc97 100644 --- a/SqlServer.2022.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2022.MS).sql +++ b/SqlServer.2022.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2022.MS).sql @@ -1,168 +1,219 @@ -- SqlServer.2022.MS SqlServer.2022 -select @@version - --- SqlServer.2022.MS SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -174,111 +225,99 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') - --- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String SET @params = N'@id int' @@ -286,9 +325,9 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set @@ -310,45 +349,39 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set --- SqlServer.2022.MS SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +389,12 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2022.MS SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' @@ -383,349 +410,475 @@ SET @ReturnFullRow = 0 [TestDataMS].[dbo].[VariableResults] -- SqlServer.2022.MS SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' + +sp_describe_first_result_set + +-- SqlServer.2022.MS SqlServer.2022 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') + +-- SqlServer.2022.MS SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -RollbackTransaction -- SqlServer.2022.MS SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -select @@version +sp_describe_first_result_set +RollbackTransaction -- SqlServer.2022.MS SqlServer.2022 SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2022.MS SqlServer.2022 -select @@version - --- SqlServer.2022.MS SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2022.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2022.MS).sql b/SqlServer.2022.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2022.MS).sql index 8013694fe2db..1b6ae8eafe31 100644 --- a/SqlServer.2022.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2022.MS).sql +++ b/SqlServer.2022.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2022.MS).sql @@ -7,169 +7,220 @@ FROM -- SqlServer.2022.MS SqlServer.2022 -select @@version - --- SqlServer.2022.MS SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -181,31 +232,31 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -221,57 +272,49 @@ EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -285,33 +328,33 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -325,68 +368,76 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2022.MS SqlServer.2022 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestDataMS].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestDataMS].[dbo].[VariableResults] +sp_describe_first_result_set RollbackTransaction diff --git a/SqlServer.2022.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2022.MS).sql b/SqlServer.2022.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2022.MS).sql index 4f253c67d617..878dd965d915 100644 --- a/SqlServer.2022.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2022.MS).sql +++ b/SqlServer.2022.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2022.MS).sql @@ -1,84 +1,104 @@ -- SqlServer.2022.MS SqlServer.2022 -select @@version - --- SqlServer.2022.MS SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 [TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2022.MS SqlServer.2022 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -[TestDataMS].[dbo].[DuplicateColumnNames] +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2022.MS SqlServer.2022 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcIntParameters] +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2022.MS SqlServer.2022 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestDataMS].[dbo].[ExecuteProcStringParameters] +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022.MS SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2022.MS SqlServer.2022 @@ -89,34 +109,58 @@ EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2022.MS SqlServer.2022 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestDataMS].[dbo].[OutRefEnumTest] +[TestDataMS].[dbo].[QueryProcParameters] -- SqlServer.2022.MS SqlServer.2022 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[QueryProcMultipleParameters] + +-- SqlServer.2022.MS SqlServer.2022 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestDataMS].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2022.MS SqlServer.2022 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestDataMS].[dbo].[ExecuteProcStringParameters] -- SqlServer.2022.MS SqlServer.2022 +DECLARE @id Int -- Int32 +SET @id = 0 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[Person_SelectByKey] + +-- SqlServer.2022.MS SqlServer.2022 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestDataMS].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2022.MS SqlServer.2022 + +[TestDataMS].[dbo].[Person_SelectAll] -- SqlServer.2022.MS SqlServer.2022 DECLARE @firstName NVarChar(50) -- String @@ -124,13 +168,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +[TestDataMS].[dbo].[Person_SelectByName] -- SqlServer.2022.MS SqlServer.2022 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2022.MS SqlServer.2022 DECLARE @FirstName NVarChar(50) -- String @@ -158,38 +204,6 @@ SET @PersonID = 0 [TestDataMS].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2022.MS SqlServer.2022 - -[TestDataMS].[dbo].[Person_SelectAll] - --- SqlServer.2022.MS SqlServer.2022 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKey] - --- SqlServer.2022.MS SqlServer.2022 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestDataMS].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2022.MS SqlServer.2022 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectByName] - --- SqlServer.2022.MS SqlServer.2022 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestDataMS].[dbo].[Person_SelectListByName] - -- SqlServer.2022.MS SqlServer.2022 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -205,62 +219,68 @@ SET @Gender = char(0) [TestDataMS].[dbo].[Person_Update] -- SqlServer.2022.MS SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[PersonSearch] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2022.MS SqlServer.2022 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 -[TestDataMS].[dbo].[QueryProcMultipleParameters] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2022.MS SqlServer.2022 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2022.MS SqlServer.2022 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2022.MS SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[dbo].[TableTypeTestProc] +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2022.MS SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[dbo].[VariableResults] +[TestDataMS].[dbo].[OutRefEnumTest] -- SqlServer.2022.MS SqlServer.2022 -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2022.MS SqlServer.2022 -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[SelectImplicitColumn] -RollbackTransaction -- SqlServer.2022.MS SqlServer.2022 -select @@version +[TestDataMS].[dbo].[DuplicateColumnNames] +RollbackTransaction -- SqlServer.2022.MS SqlServer.2022 SELECT compatibility_level FROM sys.databases WHERE name = db_name() @@ -268,48 +288,76 @@ SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -321,97 +369,101 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2022.MS SqlServer.2022 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -425,33 +477,33 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -465,77 +517,73 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set --- SqlServer.2022.MS SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2022.MS SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -[TestDataMS].[dbo].[TableTypeTestProc] +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2022.MS SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2022.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2022.MS).sql b/SqlServer.2022.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2022.MS).sql index 8013694fe2db..1b6ae8eafe31 100644 --- a/SqlServer.2022.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2022.MS).sql +++ b/SqlServer.2022.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2022.MS).sql @@ -7,169 +7,220 @@ FROM -- SqlServer.2022.MS SqlServer.2022 -select @@version - --- SqlServer.2022.MS SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -181,31 +232,31 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -221,57 +272,49 @@ EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -285,33 +328,33 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -325,68 +368,76 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2022.MS SqlServer.2022 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestDataMS].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestDataMS].[dbo].[VariableResults] +sp_describe_first_result_set RollbackTransaction diff --git a/SqlServer.2022.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2022.MS).sql b/SqlServer.2022.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2022.MS).sql index 4917293613c3..77214476d51d 100644 --- a/SqlServer.2022.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2022.MS).sql +++ b/SqlServer.2022.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2022.MS).sql @@ -1,168 +1,219 @@ -- SqlServer.2022.MS SqlServer.2022 -select @@version - --- SqlServer.2022.MS SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -174,97 +225,101 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2022.MS SqlServer.2022 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +333,33 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +373,73 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set --- SqlServer.2022.MS SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2022.MS SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -[TestDataMS].[dbo].[TableTypeTestProc] +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2022.MS SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2022.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2022.MS).sql b/SqlServer.2022.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2022.MS).sql index 4917293613c3..77214476d51d 100644 --- a/SqlServer.2022.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2022.MS).sql +++ b/SqlServer.2022.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2022.MS).sql @@ -1,168 +1,219 @@ -- SqlServer.2022.MS SqlServer.2022 -select @@version - --- SqlServer.2022.MS SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -174,97 +225,101 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2022.MS SqlServer.2022 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +333,33 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +373,73 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set --- SqlServer.2022.MS SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2022.MS SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -[TestDataMS].[dbo].[TableTypeTestProc] +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2022.MS SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2022.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2022.MS).sql b/SqlServer.2022.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2022.MS).sql index 4917293613c3..77214476d51d 100644 --- a/SqlServer.2022.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2022.MS).sql +++ b/SqlServer.2022.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2022.MS).sql @@ -1,168 +1,219 @@ -- SqlServer.2022.MS SqlServer.2022 -select @@version - --- SqlServer.2022.MS SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022.MS SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -174,97 +225,101 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2022.MS SqlServer.2022 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +333,33 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +373,73 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set --- SqlServer.2022.MS SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestDataMS].[dbo].[PersonSearch] - -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2022.MS SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -[TestDataMS].[dbo].[TableTypeTestProc] +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2022.MS SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2022.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2022.MS).sql b/SqlServer.2022.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2022.MS).sql index eb3a485e324c..411639310fa2 100644 --- a/SqlServer.2022.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2022.MS).sql +++ b/SqlServer.2022.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2022.MS).sql @@ -7,9 +7,5 @@ FROM -- SqlServer.2022.MS SqlServer.2022 -select @@version - --- SqlServer.2022.MS SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() diff --git a/SqlServer.2022.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2022.MS).sql b/SqlServer.2022.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2022.MS).sql index eb430c1a1b4e..fdc45b4ae924 100644 --- a/SqlServer.2022.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2022.MS).sql +++ b/SqlServer.2022.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2022.MS).sql @@ -14,57 +14,81 @@ FROM -- SqlServer.2022.MS SqlServer.2022 -select @@version - --- SqlServer.2022.MS SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -76,31 +100,31 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +[TestDataMS].[dbo].[PersonSearch] -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -116,57 +140,49 @@ EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2022.MS SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -180,33 +196,33 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -220,69 +236,77 @@ sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestDataMS].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2022.MS SqlServer.2022 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestDataMS].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2022.MS SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022.MS SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestDataMS].[dbo].[VariableResults] +sp_describe_first_result_set RollbackTransaction -- SqlServer.2022.MS SqlServer.2022 diff --git a/SqlServer.2022/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2022).sql b/SqlServer.2022/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2022).sql index 7650d73b0408..e821d5d01f04 100644 --- a/SqlServer.2022/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2022).sql +++ b/SqlServer.2022/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2022).sql @@ -1,56 +1,80 @@ -- SqlServer.2022 -select @@version - --- SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -62,97 +86,101 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +[TestData].[dbo].[PersonSearch] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2022 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -166,33 +194,33 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -206,77 +234,73 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set --- SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestData].[dbo].[VariableResults] -- SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -[TestData].[dbo].[TableTypeTestProc] +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2022/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2022).sql b/SqlServer.2022/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2022).sql index 3d92bad5e138..6e4c85d90f6c 100644 --- a/SqlServer.2022/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2022).sql +++ b/SqlServer.2022/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2022).sql @@ -1,168 +1,219 @@ -- SqlServer.2022 -select @@version - --- SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -174,97 +225,101 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +[TestData].[dbo].[PersonSearch] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2022 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +333,33 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +373,73 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set --- SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestData].[dbo].[VariableResults] -- SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -[TestData].[dbo].[TableTypeTestProc] +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2022/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2022).sql b/SqlServer.2022/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2022).sql index 3d92bad5e138..6e4c85d90f6c 100644 --- a/SqlServer.2022/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2022).sql +++ b/SqlServer.2022/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2022).sql @@ -1,168 +1,219 @@ -- SqlServer.2022 -select @@version - --- SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -174,97 +225,101 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +[TestData].[dbo].[PersonSearch] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2022 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +333,33 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +373,73 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set --- SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestData].[dbo].[VariableResults] -- SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -[TestData].[dbo].[TableTypeTestProc] +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2022/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2022).sql b/SqlServer.2022/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2022).sql index 73294998ed1c..2b170c3b30ad 100644 --- a/SqlServer.2022/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2022).sql +++ b/SqlServer.2022/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2022).sql @@ -67,169 +67,220 @@ CREATE TABLE TemporalTable4 -- SqlServer.2022 -select @@version - --- SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -241,97 +292,101 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +[TestData].[dbo].[PersonSearch] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2022 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -345,33 +400,33 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -385,77 +440,73 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set --- SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestData].[dbo].[VariableResults] -- SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -[TestData].[dbo].[TableTypeTestProc] +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2022/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2022).sql b/SqlServer.2022/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2022).sql index c93b431be01a..d9a6f596432b 100644 --- a/SqlServer.2022/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2022).sql +++ b/SqlServer.2022/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2022).sql @@ -67,170 +67,223 @@ CREATE TABLE TemporalTable4 -- SqlServer.2022 -select @@version - --- SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - (t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [o].[object_id] = [a_Table].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL - ) AND t.temporal_type <> 1 + [o].[is_ms_shipped] = 0 AND + [o].[type] IN (N'U', N'V') AND + ([a_Table].[object_id] IS NULL OR [a_Table].[temporal_type] <> 1 OR [a_Table].[temporal_type] IS NULL) AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -242,97 +295,101 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +[TestData].[dbo].[PersonSearch] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2022 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -346,33 +403,33 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -386,77 +443,73 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set --- SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestData].[dbo].[VariableResults] -- SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -[TestData].[dbo].[TableTypeTestProc] +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2022/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2022).sql b/SqlServer.2022/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2022).sql index 3d92bad5e138..6e4c85d90f6c 100644 --- a/SqlServer.2022/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2022).sql +++ b/SqlServer.2022/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2022).sql @@ -1,168 +1,219 @@ -- SqlServer.2022 -select @@version - --- SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -174,97 +225,101 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +[TestData].[dbo].[PersonSearch] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2022 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +333,33 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +373,73 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set --- SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestData].[dbo].[VariableResults] -- SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -[TestData].[dbo].[TableTypeTestProc] +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2022/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2022).sql b/SqlServer.2022/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2022).sql index c9bf055ed7c1..82443a41313e 100644 --- a/SqlServer.2022/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2022).sql +++ b/SqlServer.2022/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2022).sql @@ -1,168 +1,219 @@ -- SqlServer.2022 -select @@version - --- SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -174,111 +225,99 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') - --- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String SET @params = N'@id int' @@ -286,9 +325,9 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set @@ -310,45 +349,39 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set --- SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +389,12 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -383,349 +410,475 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' + +sp_describe_first_result_set + +-- SqlServer.2022 + +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') + +-- SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -RollbackTransaction -- SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -select @@version +sp_describe_first_result_set +RollbackTransaction -- SqlServer.2022 SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2022 -select @@version - --- SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2022/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2022).sql b/SqlServer.2022/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2022).sql index c9bf055ed7c1..82443a41313e 100644 --- a/SqlServer.2022/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2022).sql +++ b/SqlServer.2022/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2022).sql @@ -1,168 +1,219 @@ -- SqlServer.2022 -select @@version - --- SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -174,111 +225,99 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') - --- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String SET @params = N'@id int' @@ -286,9 +325,9 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set @@ -310,45 +349,39 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set --- SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +389,12 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -383,349 +410,475 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' + +sp_describe_first_result_set + +-- SqlServer.2022 + +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') + +-- SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -RollbackTransaction -- SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -select @@version +sp_describe_first_result_set +RollbackTransaction -- SqlServer.2022 SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2022 -select @@version - --- SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2022/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2022).sql b/SqlServer.2022/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2022).sql index 6a7d5b61f2b2..077413136be9 100644 --- a/SqlServer.2022/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2022).sql +++ b/SqlServer.2022/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2022).sql @@ -7,169 +7,220 @@ FROM -- SqlServer.2022 -select @@version - --- SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -181,31 +232,31 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[PersonSearch] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -221,57 +272,49 @@ EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -285,33 +328,33 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -325,68 +368,76 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2022 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestData].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestData].[dbo].[VariableResults] +sp_describe_first_result_set RollbackTransaction diff --git a/SqlServer.2022/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2022).sql b/SqlServer.2022/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2022).sql index 66d486268810..e9686dea3a6d 100644 --- a/SqlServer.2022/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2022).sql +++ b/SqlServer.2022/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2022).sql @@ -1,84 +1,104 @@ -- SqlServer.2022 -select @@version - --- SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 [TestData].[dbo].[AddIssue792Record] -- SqlServer.2022 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -[TestData].[dbo].[DuplicateColumnNames] +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2022 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2022 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[PersonSearch] -- SqlServer.2022 @@ -89,34 +109,58 @@ EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2022 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[OutRefEnumTest] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2022 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[QueryProcMultipleParameters] + +-- SqlServer.2022 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestData].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2022 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestData].[dbo].[ExecuteProcStringParameters] -- SqlServer.2022 +DECLARE @id Int -- Int32 +SET @id = 0 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[Person_SelectByKey] + +-- SqlServer.2022 +DECLARE @id Int -- Int32 +SET @id = 0 + +[TestData].[dbo].[Person_SelectByKeyLowercase] + +-- SqlServer.2022 + +[TestData].[dbo].[Person_SelectAll] -- SqlServer.2022 DECLARE @firstName NVarChar(50) -- String @@ -124,13 +168,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +[TestData].[dbo].[Person_SelectByName] -- SqlServer.2022 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[Person_SelectListByName] -- SqlServer.2022 DECLARE @FirstName NVarChar(50) -- String @@ -158,38 +204,6 @@ SET @PersonID = 0 [TestData].[dbo].[Person_Insert_OutputParameter] --- SqlServer.2022 - -[TestData].[dbo].[Person_SelectAll] - --- SqlServer.2022 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKey] - --- SqlServer.2022 -DECLARE @id Int -- Int32 -SET @id = 0 - -[TestData].[dbo].[Person_SelectByKeyLowercase] - --- SqlServer.2022 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectByName] - --- SqlServer.2022 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' - -[TestData].[dbo].[Person_SelectListByName] - -- SqlServer.2022 DECLARE @PersonID Int -- Int32 SET @PersonID = 0 @@ -205,62 +219,68 @@ SET @Gender = char(0) [TestData].[dbo].[Person_Update] -- SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[PersonSearch] +[TestData].[dbo].[Person_Delete] -- SqlServer.2022 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2022 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2022 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[VariableResults] -- SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[dbo].[TableTypeTestProc] +[TestData].[dbo].[OutRefTest] -- SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[dbo].[VariableResults] +[TestData].[dbo].[OutRefEnumTest] -- SqlServer.2022 -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2022 -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[SelectImplicitColumn] -RollbackTransaction -- SqlServer.2022 -select @@version +[TestData].[dbo].[DuplicateColumnNames] +RollbackTransaction -- SqlServer.2022 SELECT compatibility_level FROM sys.databases WHERE name = db_name() @@ -268,48 +288,76 @@ SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -321,97 +369,101 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +[TestData].[dbo].[PersonSearch] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2022 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -425,33 +477,33 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -465,77 +517,73 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set --- SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestData].[dbo].[VariableResults] -- SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -[TestData].[dbo].[TableTypeTestProc] +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2022/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2022).sql b/SqlServer.2022/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2022).sql index 6a7d5b61f2b2..077413136be9 100644 --- a/SqlServer.2022/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2022).sql +++ b/SqlServer.2022/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2022).sql @@ -7,169 +7,220 @@ FROM -- SqlServer.2022 -select @@version - --- SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -181,31 +232,31 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[PersonSearch] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -221,57 +272,49 @@ EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -285,33 +328,33 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -325,68 +368,76 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2022 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestData].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestData].[dbo].[VariableResults] +sp_describe_first_result_set RollbackTransaction diff --git a/SqlServer.2022/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2022).sql b/SqlServer.2022/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2022).sql index 3d92bad5e138..6e4c85d90f6c 100644 --- a/SqlServer.2022/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2022).sql +++ b/SqlServer.2022/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2022).sql @@ -1,168 +1,219 @@ -- SqlServer.2022 -select @@version - --- SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -174,97 +225,101 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +[TestData].[dbo].[PersonSearch] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2022 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +333,33 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +373,73 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set --- SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestData].[dbo].[VariableResults] -- SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -[TestData].[dbo].[TableTypeTestProc] +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2022/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2022).sql b/SqlServer.2022/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2022).sql index 3d92bad5e138..6e4c85d90f6c 100644 --- a/SqlServer.2022/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2022).sql +++ b/SqlServer.2022/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2022).sql @@ -1,168 +1,219 @@ -- SqlServer.2022 -select @@version - --- SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -174,97 +225,101 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +[TestData].[dbo].[PersonSearch] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2022 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +333,33 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +373,73 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set --- SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestData].[dbo].[VariableResults] -- SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -[TestData].[dbo].[TableTypeTestProc] +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2022/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2022).sql b/SqlServer.2022/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2022).sql index 3d92bad5e138..6e4c85d90f6c 100644 --- a/SqlServer.2022/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2022).sql +++ b/SqlServer.2022/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2022).sql @@ -1,168 +1,219 @@ -- SqlServer.2022 -select @@version - --- SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2022 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2022 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -174,97 +225,101 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +[TestData].[dbo].[PersonSearch] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2022 + +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') + -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -278,33 +333,33 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -318,77 +373,73 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set --- SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestData].[dbo].[VariableResults] -- SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -[TestData].[dbo].[TableTypeTestProc] +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestData].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2022 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' diff --git a/SqlServer.2022/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2022).sql b/SqlServer.2022/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2022).sql index 5bfac88d472d..f03d24e2df0e 100644 --- a/SqlServer.2022/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2022).sql +++ b/SqlServer.2022/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2022).sql @@ -7,9 +7,5 @@ FROM -- SqlServer.2022 -select @@version - --- SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() diff --git a/SqlServer.2022/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2022).sql b/SqlServer.2022/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2022).sql index a1e999486080..a46fc45e0576 100644 --- a/SqlServer.2022/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2022).sql +++ b/SqlServer.2022/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2022).sql @@ -14,57 +14,81 @@ FROM -- SqlServer.2022 -select @@version - --- SqlServer.2022 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -76,31 +100,31 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2022 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[PersonSearch] -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String @@ -116,57 +140,49 @@ EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set - --- SqlServer.2022 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@id int' sp_describe_first_result_set @@ -180,33 +196,33 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set @@ -220,69 +236,77 @@ sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2022 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestData].[dbo].[VariableResults] + -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL -[TestData].[dbo].[TableTypeTestProc] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2022 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2022 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[DuplicateColumnNames] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' -[TestData].[dbo].[VariableResults] +sp_describe_first_result_set RollbackTransaction -- SqlServer.2022 diff --git a/SqlServer.2025.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2025.MS).sql b/SqlServer.2025.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2025.MS).sql index f10cd9df9059..7f34cf8d59b1 100644 --- a/SqlServer.2025.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2025.MS).sql +++ b/SqlServer.2025.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2025.MS).sql @@ -1,118 +1,150 @@ -- SqlServer.2025.MS SqlServer.2025 -select @@version - --- SqlServer.2025.MS SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int' sp_describe_first_result_set @@ -134,31 +166,41 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -166,44 +208,46 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' @@ -220,65 +264,45 @@ SET @nameFilter = N'' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - --- SqlServer.2025.MS SqlServer.2025 - -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set diff --git a/SqlServer.2025.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2025.MS).sql b/SqlServer.2025.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2025.MS).sql index 4a0fdd683a84..b88ecf228b3c 100644 --- a/SqlServer.2025.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2025.MS).sql +++ b/SqlServer.2025.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2025.MS).sql @@ -1,230 +1,289 @@ -- SqlServer.2025.MS SqlServer.2025 -select @@version - --- SqlServer.2025.MS SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int' sp_describe_first_result_set @@ -246,31 +305,41 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -278,44 +347,46 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' @@ -332,65 +403,45 @@ SET @nameFilter = N'' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - --- SqlServer.2025.MS SqlServer.2025 - -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set diff --git a/SqlServer.2025.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2025.MS).sql b/SqlServer.2025.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2025.MS).sql index 4a0fdd683a84..b88ecf228b3c 100644 --- a/SqlServer.2025.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2025.MS).sql +++ b/SqlServer.2025.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2025.MS).sql @@ -1,230 +1,289 @@ -- SqlServer.2025.MS SqlServer.2025 -select @@version - --- SqlServer.2025.MS SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int' sp_describe_first_result_set @@ -246,31 +305,41 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -278,44 +347,46 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' @@ -332,65 +403,45 @@ SET @nameFilter = N'' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - --- SqlServer.2025.MS SqlServer.2025 - -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set diff --git a/SqlServer.2025.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2025.MS).sql b/SqlServer.2025.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2025.MS).sql index 12332ba72949..5316cbbc182d 100644 --- a/SqlServer.2025.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2025.MS).sql +++ b/SqlServer.2025.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2025.MS).sql @@ -67,231 +67,290 @@ CREATE TABLE TemporalTable4 -- SqlServer.2025.MS SqlServer.2025 -select @@version - --- SqlServer.2025.MS SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int' sp_describe_first_result_set @@ -313,31 +372,41 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -345,44 +414,46 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' @@ -399,65 +470,45 @@ SET @nameFilter = N'' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - --- SqlServer.2025.MS SqlServer.2025 - -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set diff --git a/SqlServer.2025.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2025.MS).sql b/SqlServer.2025.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2025.MS).sql index d6d36b341114..3f500555f068 100644 --- a/SqlServer.2025.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2025.MS).sql +++ b/SqlServer.2025.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2025.MS).sql @@ -67,232 +67,293 @@ CREATE TABLE TemporalTable4 -- SqlServer.2025.MS SqlServer.2025 -select @@version - --- SqlServer.2025.MS SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - (t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [o].[object_id] = [a_Table].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL - ) AND t.temporal_type <> 1 + [o].[is_ms_shipped] = 0 AND + [o].[type] IN (N'U', N'V') AND + ([a_Table].[object_id] IS NULL OR [a_Table].[temporal_type] <> 1 OR [a_Table].[temporal_type] IS NULL) AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int' sp_describe_first_result_set @@ -314,31 +375,41 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -346,44 +417,46 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' @@ -400,65 +473,45 @@ SET @nameFilter = N'' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - --- SqlServer.2025.MS SqlServer.2025 - -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set diff --git a/SqlServer.2025.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2025.MS).sql b/SqlServer.2025.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2025.MS).sql index 4a0fdd683a84..b88ecf228b3c 100644 --- a/SqlServer.2025.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2025.MS).sql +++ b/SqlServer.2025.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2025.MS).sql @@ -1,230 +1,289 @@ -- SqlServer.2025.MS SqlServer.2025 -select @@version - --- SqlServer.2025.MS SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int' sp_describe_first_result_set @@ -246,31 +305,41 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -278,44 +347,46 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' @@ -332,65 +403,45 @@ SET @nameFilter = N'' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - --- SqlServer.2025.MS SqlServer.2025 - -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set diff --git a/SqlServer.2025.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2025.MS).sql b/SqlServer.2025.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2025.MS).sql index f2ee62e33943..45b5f28e3ce8 100644 --- a/SqlServer.2025.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2025.MS).sql +++ b/SqlServer.2025.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2025.MS).sql @@ -1,230 +1,289 @@ -- SqlServer.2025.MS SqlServer.2025 -select @@version - --- SqlServer.2025.MS SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int' sp_describe_first_result_set @@ -246,31 +305,41 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -278,44 +347,46 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' @@ -332,400 +403,482 @@ SET @nameFilter = N'' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - --- SqlServer.2025.MS SqlServer.2025 - -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set RollbackTransaction -- SqlServer.2025.MS SqlServer.2025 -select @@version - --- SqlServer.2025.MS SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2025.MS SqlServer.2025 -select @@version - --- SqlServer.2025.MS SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2025.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2025.MS).sql b/SqlServer.2025.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2025.MS).sql index f2ee62e33943..45b5f28e3ce8 100644 --- a/SqlServer.2025.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2025.MS).sql +++ b/SqlServer.2025.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2025.MS).sql @@ -1,230 +1,289 @@ -- SqlServer.2025.MS SqlServer.2025 -select @@version - --- SqlServer.2025.MS SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int' sp_describe_first_result_set @@ -246,31 +305,41 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -278,44 +347,46 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' @@ -332,400 +403,482 @@ SET @nameFilter = N'' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - --- SqlServer.2025.MS SqlServer.2025 - -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set RollbackTransaction -- SqlServer.2025.MS SqlServer.2025 -select @@version - --- SqlServer.2025.MS SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2025.MS SqlServer.2025 -select @@version - --- SqlServer.2025.MS SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2025.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2025.MS).sql b/SqlServer.2025.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2025.MS).sql index 15db3e127303..a7bf80e11827 100644 --- a/SqlServer.2025.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2025.MS).sql +++ b/SqlServer.2025.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2025.MS).sql @@ -7,231 +7,290 @@ FROM -- SqlServer.2025.MS SqlServer.2025 -select @@version - --- SqlServer.2025.MS SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int' sp_describe_first_result_set @@ -253,76 +312,76 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestDataMS].[dbo].[TableTypeTestProc] + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' @@ -339,12 +398,16 @@ SET @nameFilter = N'' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' @@ -355,38 +418,26 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - RollbackTransaction diff --git a/SqlServer.2025.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2025.MS).sql b/SqlServer.2025.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2025.MS).sql index d47aa9784e22..1da173536ea7 100644 --- a/SqlServer.2025.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2025.MS).sql +++ b/SqlServer.2025.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2025.MS).sql @@ -1,122 +1,96 @@ -- SqlServer.2025.MS SqlServer.2025 -select @@version - --- SqlServer.2025.MS SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2025.MS SqlServer.2025 - -[TestDataMS].[dbo].[AddIssue792Record] - --- SqlServer.2025.MS SqlServer.2025 - -[TestDataMS].[dbo].[DuplicateColumnNames] + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 - -[TestDataMS].[dbo].[ExecuteProcIntParameters] - --- SqlServer.2025.MS SqlServer.2025 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 - -[TestDataMS].[dbo].[ExecuteProcStringParameters] - --- SqlServer.2025.MS SqlServer.2025 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') - --- SqlServer.2025.MS SqlServer.2025 - -[TestDataMS].[dbo].[Issue1897] - --- SqlServer.2025.MS SqlServer.2025 - -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') - --- SqlServer.2025.MS SqlServer.2025 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestDataMS].[dbo].[OutRefEnumTest] +[TestDataMS].[dbo].[Person_SelectByKey] -- SqlServer.2025.MS SqlServer.2025 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestDataMS].[dbo].[OutRefTest] +[TestDataMS].[dbo].[Person_SelectByKeyLowercase] -- SqlServer.2025.MS SqlServer.2025 -[TestDataMS].[dbo].[Patient_SelectAll] +[TestDataMS].[dbo].[Person_SelectAll] -- SqlServer.2025.MS SqlServer.2025 DECLARE @firstName NVarChar(50) -- String @@ -124,13 +98,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Patient_SelectByName] +[TestDataMS].[dbo].[Person_SelectByName] -- SqlServer.2025.MS SqlServer.2025 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMS].[dbo].[Person_Delete] +[TestDataMS].[dbo].[Person_SelectListByName] -- SqlServer.2025.MS SqlServer.2025 DECLARE @FirstName NVarChar(50) -- String @@ -159,20 +135,28 @@ SET @PersonID = 0 [TestDataMS].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2025.MS SqlServer.2025 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestDataMS].[dbo].[Person_SelectAll] +[TestDataMS].[dbo].[Person_Update] -- SqlServer.2025.MS SqlServer.2025 -DECLARE @id Int -- Int32 -SET @id = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMS].[dbo].[Person_SelectByKey] +[TestDataMS].[dbo].[Person_Delete] -- SqlServer.2025.MS SqlServer.2025 -DECLARE @id Int -- Int32 -SET @id = 0 -[TestDataMS].[dbo].[Person_SelectByKeyLowercase] +[TestDataMS].[dbo].[Patient_SelectAll] -- SqlServer.2025.MS SqlServer.2025 DECLARE @firstName NVarChar(50) -- String @@ -180,61 +164,55 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMS].[dbo].[Person_SelectByName] +[TestDataMS].[dbo].[Patient_SelectByName] -- SqlServer.2025.MS SqlServer.2025 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[Person_SelectListByName] +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2025.MS SqlServer.2025 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[dbo].[Person_Update] +[TestDataMS].[dbo].[OutRefTest] -- SqlServer.2025.MS SqlServer.2025 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMS].[dbo].[PersonSearch] +[TestDataMS].[dbo].[OutRefEnumTest] -- SqlServer.2025.MS SqlServer.2025 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 -[TestDataMS].[dbo].[QueryProcMultipleParameters] +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2025.MS SqlServer.2025 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestDataMS].[dbo].[QueryProcParameters] +[TestDataMS].[dbo].[SelectImplicitColumn] -- SqlServer.2025.MS SqlServer.2025 -[TestDataMS].[dbo].[SelectImplicitColumn] +[TestDataMS].[dbo].[DuplicateColumnNames] + +-- SqlServer.2025.MS SqlServer.2025 + +[TestDataMS].[dbo].[AddIssue792Record] -- SqlServer.2025.MS SqlServer.2025 DECLARE @table [dbo].[TestTableType] -- Structured -- Object @@ -243,24 +221,66 @@ SET @table = NULL [TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2025.MS SqlServer.2025 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMS].[dbo].[VariableResults] +[TestDataMS].[TestSchema].[TestProcedure] -- SqlServer.2025.MS SqlServer.2025 EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2025.MS SqlServer.2025 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMS].[TestSchema].[TestProcedure] +[TestDataMS].[dbo].[PersonSearch] + +-- SqlServer.2025.MS SqlServer.2025 + +[TestDataMS].[dbo].[Issue1897] -RollbackTransaction -- SqlServer.2025.MS SqlServer.2025 -select @@version +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +-- SqlServer.2025.MS SqlServer.2025 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 + +[TestDataMS].[dbo].[QueryProcParameters] + +-- SqlServer.2025.MS SqlServer.2025 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 + +[TestDataMS].[dbo].[QueryProcMultipleParameters] + +-- SqlServer.2025.MS SqlServer.2025 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestDataMS].[dbo].[ExecuteProcIntParameters] + +-- SqlServer.2025.MS SqlServer.2025 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 + +[TestDataMS].[dbo].[ExecuteProcStringParameters] + +RollbackTransaction -- SqlServer.2025.MS SqlServer.2025 SELECT compatibility_level FROM sys.databases WHERE name = db_name() @@ -268,110 +288,146 @@ SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int' sp_describe_first_result_set @@ -393,31 +449,41 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -425,44 +491,46 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' @@ -479,65 +547,45 @@ SET @nameFilter = N'' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - --- SqlServer.2025.MS SqlServer.2025 - -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set diff --git a/SqlServer.2025.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2025.MS).sql b/SqlServer.2025.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2025.MS).sql index 15db3e127303..a7bf80e11827 100644 --- a/SqlServer.2025.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2025.MS).sql +++ b/SqlServer.2025.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2025.MS).sql @@ -7,231 +7,290 @@ FROM -- SqlServer.2025.MS SqlServer.2025 -select @@version - --- SqlServer.2025.MS SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int' sp_describe_first_result_set @@ -253,76 +312,76 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestDataMS].[dbo].[TableTypeTestProc] + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' @@ -339,12 +398,16 @@ SET @nameFilter = N'' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' @@ -355,38 +418,26 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - RollbackTransaction diff --git a/SqlServer.2025.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2025.MS).sql b/SqlServer.2025.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2025.MS).sql index 4a0fdd683a84..b88ecf228b3c 100644 --- a/SqlServer.2025.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2025.MS).sql +++ b/SqlServer.2025.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2025.MS).sql @@ -1,230 +1,289 @@ -- SqlServer.2025.MS SqlServer.2025 -select @@version - --- SqlServer.2025.MS SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int' sp_describe_first_result_set @@ -246,31 +305,41 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -278,44 +347,46 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' @@ -332,65 +403,45 @@ SET @nameFilter = N'' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - --- SqlServer.2025.MS SqlServer.2025 - -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set diff --git a/SqlServer.2025.MS/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.JsonDataTypeTest(SqlServer.2025.MS,False).sql b/SqlServer.2025.MS/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.JsonDataTypeTest(SqlServer.2025.MS,False).sql index 93fa0dbb99bb..324ef8fd68d2 100644 --- a/SqlServer.2025.MS/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.JsonDataTypeTest(SqlServer.2025.MS,False).sql +++ b/SqlServer.2025.MS/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.JsonDataTypeTest(SqlServer.2025.MS,False).sql @@ -1,120 +1,143 @@ -- SqlServer.2025.MS SqlServer.2025 -select @@version - --- SqlServer.2025.MS SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] diff --git a/SqlServer.2025.MS/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.JsonDataTypeTest(SqlServer.2025.MS,True).sql b/SqlServer.2025.MS/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.JsonDataTypeTest(SqlServer.2025.MS,True).sql index 93fa0dbb99bb..324ef8fd68d2 100644 --- a/SqlServer.2025.MS/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.JsonDataTypeTest(SqlServer.2025.MS,True).sql +++ b/SqlServer.2025.MS/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.JsonDataTypeTest(SqlServer.2025.MS,True).sql @@ -1,120 +1,143 @@ -- SqlServer.2025.MS SqlServer.2025 -select @@version - --- SqlServer.2025.MS SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] diff --git a/SqlServer.2025.MS/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.VectorDataTypeTest(SqlServer.2025.MS,False).sql b/SqlServer.2025.MS/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.VectorDataTypeTest(SqlServer.2025.MS,False).sql index 93fa0dbb99bb..324ef8fd68d2 100644 --- a/SqlServer.2025.MS/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.VectorDataTypeTest(SqlServer.2025.MS,False).sql +++ b/SqlServer.2025.MS/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.VectorDataTypeTest(SqlServer.2025.MS,False).sql @@ -1,120 +1,143 @@ -- SqlServer.2025.MS SqlServer.2025 -select @@version - --- SqlServer.2025.MS SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] diff --git a/SqlServer.2025.MS/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.VectorDataTypeTest(SqlServer.2025.MS,True).sql b/SqlServer.2025.MS/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.VectorDataTypeTest(SqlServer.2025.MS,True).sql index 93fa0dbb99bb..324ef8fd68d2 100644 --- a/SqlServer.2025.MS/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.VectorDataTypeTest(SqlServer.2025.MS,True).sql +++ b/SqlServer.2025.MS/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.VectorDataTypeTest(SqlServer.2025.MS,True).sql @@ -1,120 +1,143 @@ -- SqlServer.2025.MS SqlServer.2025 -select @@version - --- SqlServer.2025.MS SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] diff --git a/SqlServer.2025.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2025.MS).sql b/SqlServer.2025.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2025.MS).sql index 4a0fdd683a84..b88ecf228b3c 100644 --- a/SqlServer.2025.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2025.MS).sql +++ b/SqlServer.2025.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2025.MS).sql @@ -1,230 +1,289 @@ -- SqlServer.2025.MS SqlServer.2025 -select @@version - --- SqlServer.2025.MS SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int' sp_describe_first_result_set @@ -246,31 +305,41 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -278,44 +347,46 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' @@ -332,65 +403,45 @@ SET @nameFilter = N'' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - --- SqlServer.2025.MS SqlServer.2025 - -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set diff --git a/SqlServer.2025.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2025.MS).sql b/SqlServer.2025.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2025.MS).sql index 4a0fdd683a84..b88ecf228b3c 100644 --- a/SqlServer.2025.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2025.MS).sql +++ b/SqlServer.2025.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2025.MS).sql @@ -1,230 +1,289 @@ -- SqlServer.2025.MS SqlServer.2025 -select @@version - --- SqlServer.2025.MS SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025.MS SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int' sp_describe_first_result_set @@ -246,31 +305,41 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMS].[dbo].[VariableResults] + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -278,44 +347,46 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -sp_describe_first_result_set +[TestDataMS].[dbo].[TableTypeTestProc] -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' @@ -332,65 +403,45 @@ SET @nameFilter = N'' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - --- SqlServer.2025.MS SqlServer.2025 - -EXEC('SELECT * FROM [TestDataMS].[TestSchema].[SchemaTableFunction](NULL)') - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set diff --git a/SqlServer.2025.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2025.MS).sql b/SqlServer.2025.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2025.MS).sql index eb4c9f0c5b5c..01eef41be891 100644 --- a/SqlServer.2025.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2025.MS).sql +++ b/SqlServer.2025.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2025.MS).sql @@ -7,9 +7,5 @@ FROM -- SqlServer.2025.MS SqlServer.2025 -select @@version - --- SqlServer.2025.MS SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() diff --git a/SqlServer.2025.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2025.MS).sql b/SqlServer.2025.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2025.MS).sql index 5016eab3db30..43606c4e820b 100644 --- a/SqlServer.2025.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2025.MS).sql +++ b/SqlServer.2025.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2025.MS).sql @@ -14,119 +14,151 @@ FROM -- SqlServer.2025.MS SqlServer.2025 -select @@version - --- SqlServer.2025.MS SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') +sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@PersonID int' sp_describe_first_result_set @@ -148,76 +180,76 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -sp_describe_first_result_set +[TestDataMS].[dbo].[VariableResults] -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMS].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKey] @id' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestDataMS].[dbo].[GetParentByID](NULL)') -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMS].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL + +[TestDataMS].[dbo].[TableTypeTestProc] + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[PersonSearch] @nameFilter' @@ -234,12 +266,16 @@ SET @nameFilter = N'' -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMS].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set +-- SqlServer.2025.MS SqlServer.2025 + +EXEC('SELECT * FROM [TestDataMS].[dbo].[Issue1921]()') + -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcParameters] @input, @output1, @output2' @@ -250,40 +286,28 @@ sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMS].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestDataMS].[dbo].[TableTypeTestProc] - -- SqlServer.2025.MS SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMS].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMS].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.2025.MS SqlServer.2025 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 - -[TestDataMS].[dbo].[VariableResults] - RollbackTransaction -- SqlServer.2025.MS SqlServer.2025 diff --git a/SqlServer.2025/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2025).sql b/SqlServer.2025/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2025).sql index 91b71716d589..8d8570b6bdcc 100644 --- a/SqlServer.2025/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2025).sql +++ b/SqlServer.2025/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.2025).sql @@ -1,60 +1,88 @@ -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2025 + +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -70,27 +98,29 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -98,69 +128,63 @@ sp_describe_first_result_set -- SqlServer.2025 -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -182,15 +206,15 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -198,45 +222,47 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -244,18 +270,12 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -271,14 +291,18 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2025/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2025).sql b/SqlServer.2025/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2025).sql index ef73ea4e29ff..ada9307c6e1e 100644 --- a/SqlServer.2025/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2025).sql +++ b/SqlServer.2025/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.2025).sql @@ -1,172 +1,227 @@ -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2025 + +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -182,27 +237,29 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -210,69 +267,63 @@ sp_describe_first_result_set -- SqlServer.2025 -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -294,15 +345,15 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -310,45 +361,47 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +409,12 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -383,14 +430,18 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2025/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2025).sql b/SqlServer.2025/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2025).sql index ef73ea4e29ff..ada9307c6e1e 100644 --- a/SqlServer.2025/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2025).sql +++ b/SqlServer.2025/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.2025).sql @@ -1,172 +1,227 @@ -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2025 + +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -182,27 +237,29 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -210,69 +267,63 @@ sp_describe_first_result_set -- SqlServer.2025 -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -294,15 +345,15 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -310,45 +361,47 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +409,12 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -383,14 +430,18 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2025/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2025).sql b/SqlServer.2025/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2025).sql index 3338fdaa4825..8d5ad2519fa7 100644 --- a/SqlServer.2025/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2025).sql +++ b/SqlServer.2025/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.2025).sql @@ -67,173 +67,228 @@ CREATE TABLE TemporalTable4 -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2025 + +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -249,27 +304,29 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -277,69 +334,63 @@ sp_describe_first_result_set -- SqlServer.2025 -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -361,15 +412,15 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -377,45 +428,47 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -423,18 +476,12 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -450,14 +497,18 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2025/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2025).sql b/SqlServer.2025/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2025).sql index 18d9856d014e..5ce946d88fc8 100644 --- a/SqlServer.2025/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2025).sql +++ b/SqlServer.2025/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.2025).sql @@ -67,174 +67,231 @@ CREATE TABLE TemporalTable4 -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - (t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [o].[object_id] = [a_Table].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL - ) AND t.temporal_type <> 1 + [o].[is_ms_shipped] = 0 AND + [o].[type] IN (N'U', N'V') AND + ([a_Table].[object_id] IS NULL OR [a_Table].[temporal_type] <> 1 OR [a_Table].[temporal_type] IS NULL) AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2025 + +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -250,27 +307,29 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -278,69 +337,63 @@ sp_describe_first_result_set -- SqlServer.2025 -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -362,15 +415,15 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -378,45 +431,47 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -424,18 +479,12 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -451,14 +500,18 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2025/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2025).sql b/SqlServer.2025/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2025).sql index ef73ea4e29ff..ada9307c6e1e 100644 --- a/SqlServer.2025/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2025).sql +++ b/SqlServer.2025/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.2025).sql @@ -1,172 +1,227 @@ -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2025 + +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -182,27 +237,29 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -210,69 +267,63 @@ sp_describe_first_result_set -- SqlServer.2025 -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -294,15 +345,15 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -310,45 +361,47 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +409,12 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -383,14 +430,18 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2025/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2025).sql b/SqlServer.2025/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2025).sql index db3299806912..92376d137db6 100644 --- a/SqlServer.2025/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2025).sql +++ b/SqlServer.2025/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.2025).sql @@ -1,172 +1,227 @@ -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2025 + +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -182,27 +237,29 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -210,69 +267,63 @@ sp_describe_first_result_set -- SqlServer.2025 -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -294,15 +345,15 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -310,45 +361,47 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +409,12 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -383,349 +430,455 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set RollbackTransaction -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2025/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2025).sql b/SqlServer.2025/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2025).sql index db3299806912..92376d137db6 100644 --- a/SqlServer.2025/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2025).sql +++ b/SqlServer.2025/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.2025).sql @@ -1,172 +1,227 @@ -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2025 + +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -182,27 +237,29 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -210,69 +267,63 @@ sp_describe_first_result_set -- SqlServer.2025 -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -294,15 +345,15 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -310,45 +361,47 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +409,12 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -383,349 +430,455 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set RollbackTransaction -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.2025/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2025).sql b/SqlServer.2025/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2025).sql index 62a42d114a33..e9571ba3dae8 100644 --- a/SqlServer.2025/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2025).sql +++ b/SqlServer.2025/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.2025).sql @@ -7,173 +7,228 @@ FROM -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2025 + +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -189,103 +244,95 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2025 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') - --- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String SET @params = N'@id int' @@ -293,9 +340,9 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set @@ -317,45 +364,39 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set --- SqlServer.2025 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,18 +404,12 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -389,4 +424,20 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] +-- SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' + +sp_describe_first_result_set + +-- SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.2025/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2025).sql b/SqlServer.2025/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2025).sql index c6e9bd8f5e86..c886e1713836 100644 --- a/SqlServer.2025/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2025).sql +++ b/SqlServer.2025/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.2025).sql @@ -1,166 +1,162 @@ -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.2025 - -[TestData].[dbo].[AddIssue792Record] + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.2025 -[TestData].[dbo].[DuplicateColumnNames] +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2025 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcIntParameters] +[TestData].[dbo].[SelectImplicitColumn] -- SqlServer.2025 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output Int -- Int32 -SET @output = 0 -[TestData].[dbo].[ExecuteProcStringParameters] +[TestData].[dbo].[DuplicateColumnNames] -- SqlServer.2025 -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[AddIssue792Record] -- SqlServer.2025 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -[TestData].[dbo].[Issue1897] +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2025 -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +[TestData].[TestSchema].[TestProcedure] -- SqlServer.2025 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' -[TestData].[dbo].[OutRefEnumTest] +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2025 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestData].[dbo].[OutRefTest] +[TestData].[dbo].[PersonSearch] -- SqlServer.2025 -[TestData].[dbo].[Patient_SelectAll] +[TestData].[dbo].[Issue1897] -- SqlServer.2025 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' -[TestData].[dbo].[Patient_SelectByName] +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2025 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -[TestData].[dbo].[Person_Delete] +[TestData].[dbo].[QueryProcParameters] -- SqlServer.2025 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestData].[dbo].[Person_Insert] +[TestData].[dbo].[QueryProcMultipleParameters] -- SqlServer.2025 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Person_Insert_OutputParameter] +[TestData].[dbo].[ExecuteProcIntParameters] -- SqlServer.2025 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output Int -- Int32 +SET @output = 0 -[TestData].[dbo].[Person_SelectAll] +[TestData].[dbo].[ExecuteProcStringParameters] -- SqlServer.2025 DECLARE @id Int -- Int32 @@ -174,6 +170,10 @@ SET @id = 0 [TestData].[dbo].[Person_SelectByKeyLowercase] +-- SqlServer.2025 + +[TestData].[dbo].[Person_SelectAll] + -- SqlServer.2025 DECLARE @firstName NVarChar(50) -- String SET @firstName = N'' @@ -191,8 +191,6 @@ SET @lastName = N'' [TestData].[dbo].[Person_SelectListByName] -- SqlServer.2025 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 DECLARE @FirstName NVarChar(50) -- String SET @FirstName = N'' DECLARE @LastName NVarChar(50) -- String @@ -202,45 +200,53 @@ SET @MiddleName = N'' DECLARE @Gender Char(1) -- AnsiStringFixedLength SET @Gender = char(0) -[TestData].[dbo].[Person_Update] +[TestData].[dbo].[Person_Insert] -- SqlServer.2025 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[PersonSearch] +[TestData].[dbo].[Person_Insert_OutputParameter] -- SqlServer.2025 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestData].[dbo].[QueryProcMultipleParameters] +[TestData].[dbo].[Person_Update] -- SqlServer.2025 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestData].[dbo].[QueryProcParameters] +[TestData].[dbo].[Person_Delete] -- SqlServer.2025 -[TestData].[dbo].[SelectImplicitColumn] +[TestData].[dbo].[Patient_SelectAll] -- SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestData].[dbo].[TableTypeTestProc] +[TestData].[dbo].[Patient_SelectByName] -- SqlServer.2025 DECLARE @ReturnFullRow Bit -- Boolean @@ -249,71 +255,117 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2025 +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +[TestData].[dbo].[OutRefTest] -- SqlServer.2025 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestData].[TestSchema].[TestProcedure] +[TestData].[dbo].[OutRefEnumTest] RollbackTransaction -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2025 + +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -329,27 +381,29 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -357,69 +411,63 @@ sp_describe_first_result_set -- SqlServer.2025 -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -441,15 +489,15 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -457,45 +505,47 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -503,18 +553,12 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -530,14 +574,18 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2025/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2025).sql b/SqlServer.2025/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2025).sql index 62a42d114a33..e9571ba3dae8 100644 --- a/SqlServer.2025/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2025).sql +++ b/SqlServer.2025/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.2025).sql @@ -7,173 +7,228 @@ FROM -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2025 + +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -189,103 +244,95 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2025 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') - --- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String SET @params = N'@id int' @@ -293,9 +340,9 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set @@ -317,45 +364,39 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set --- SqlServer.2025 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -363,18 +404,12 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -389,4 +424,20 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] +-- SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' + +sp_describe_first_result_set + +-- SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.2025/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2025).sql b/SqlServer.2025/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2025).sql index ef73ea4e29ff..ada9307c6e1e 100644 --- a/SqlServer.2025/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2025).sql +++ b/SqlServer.2025/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.2025).sql @@ -1,172 +1,227 @@ -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2025 + +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -182,27 +237,29 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -210,69 +267,63 @@ sp_describe_first_result_set -- SqlServer.2025 -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -294,15 +345,15 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -310,45 +361,47 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +409,12 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -383,14 +430,18 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2025/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.JsonDataTypeTest(SqlServer.2025,False).sql b/SqlServer.2025/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.JsonDataTypeTest(SqlServer.2025,False).sql index 77b1e9216573..cbd673cc2e5f 100644 --- a/SqlServer.2025/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.JsonDataTypeTest(SqlServer.2025,False).sql +++ b/SqlServer.2025/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.JsonDataTypeTest(SqlServer.2025,False).sql @@ -1,120 +1,143 @@ -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] diff --git a/SqlServer.2025/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.JsonDataTypeTest(SqlServer.2025,True).sql b/SqlServer.2025/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.JsonDataTypeTest(SqlServer.2025,True).sql index 77b1e9216573..cbd673cc2e5f 100644 --- a/SqlServer.2025/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.JsonDataTypeTest(SqlServer.2025,True).sql +++ b/SqlServer.2025/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.JsonDataTypeTest(SqlServer.2025,True).sql @@ -1,120 +1,143 @@ -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] diff --git a/SqlServer.2025/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.VectorDataTypeTest(SqlServer.2025,False).sql b/SqlServer.2025/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.VectorDataTypeTest(SqlServer.2025,False).sql index 77b1e9216573..cbd673cc2e5f 100644 --- a/SqlServer.2025/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.VectorDataTypeTest(SqlServer.2025,False).sql +++ b/SqlServer.2025/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.VectorDataTypeTest(SqlServer.2025,False).sql @@ -1,120 +1,143 @@ -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] diff --git a/SqlServer.2025/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.VectorDataTypeTest(SqlServer.2025,True).sql b/SqlServer.2025/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.VectorDataTypeTest(SqlServer.2025,True).sql index 77b1e9216573..cbd673cc2e5f 100644 --- a/SqlServer.2025/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.VectorDataTypeTest(SqlServer.2025,True).sql +++ b/SqlServer.2025/Tests/SchemaProvider/SqlServerTests/Tests.SchemaProvider.SqlServerTests.VectorDataTypeTest(SqlServer.2025,True).sql @@ -1,120 +1,143 @@ -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] diff --git a/SqlServer.2025/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2025).sql b/SqlServer.2025/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2025).sql index ef73ea4e29ff..ada9307c6e1e 100644 --- a/SqlServer.2025/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2025).sql +++ b/SqlServer.2025/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.2025).sql @@ -1,172 +1,227 @@ -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2025 + +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -182,27 +237,29 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -210,69 +267,63 @@ sp_describe_first_result_set -- SqlServer.2025 -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -294,15 +345,15 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -310,45 +361,47 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +409,12 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -383,14 +430,18 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2025/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2025).sql b/SqlServer.2025/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2025).sql index ef73ea4e29ff..ada9307c6e1e 100644 --- a/SqlServer.2025/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2025).sql +++ b/SqlServer.2025/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.2025).sql @@ -1,172 +1,227 @@ -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.2025 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.2025 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2025 + +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -182,27 +237,29 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -210,69 +267,63 @@ sp_describe_first_result_set -- SqlServer.2025 -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') +EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output int' sp_describe_first_result_set @@ -294,15 +345,15 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -310,45 +361,47 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' -[TestData].[dbo].[PersonSearch] +sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -356,18 +409,12 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -383,14 +430,18 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] -- SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' -EXEC('SELECT * FROM [TestData].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set diff --git a/SqlServer.2025/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2025).sql b/SqlServer.2025/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2025).sql index b30f10658e06..cef60f99cda4 100644 --- a/SqlServer.2025/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2025).sql +++ b/SqlServer.2025/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.2025).sql @@ -7,9 +7,5 @@ FROM -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() diff --git a/SqlServer.2025/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2025).sql b/SqlServer.2025/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2025).sql index a2862fc2d03a..d18b19de7449 100644 --- a/SqlServer.2025/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2025).sql +++ b/SqlServer.2025/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.2025).sql @@ -14,61 +14,89 @@ FROM -- SqlServer.2025 -select @@version - --- SqlServer.2025 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.2025 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' + +-- SqlServer.2025 + +EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' +SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -84,103 +112,95 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' +SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output int' +SET @params = N'@table [dbo].[TestTableType]' sp_describe_first_result_set -- SqlServer.2025 +DECLARE @table [dbo].[TestTableType] -- Structured -- Object +SET @table = NULL -EXEC('SELECT * FROM [TestData].[dbo].[GetParentByID](NULL)') +[TestData].[dbo].[TableTypeTestProc] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' +SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.2025 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') - --- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' -DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' - -sp_describe_first_result_set +[TestData].[dbo].[PersonSearch] -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestData].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'' sp_describe_first_result_set -- SqlServer.2025 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' -sp_describe_first_result_set +EXEC('SELECT * FROM [TestData].[dbo].[Issue1921]()') -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@input int, @output1 int, @output2 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcIntParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' +SET @tsql = N'exec [TestData].[dbo].[ExecuteProcStringParameters] @input, @output' DECLARE @params NVarChar(4000) -- String -SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' +SET @params = N'@input int, @output int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String SET @params = N'@id int' @@ -188,9 +208,9 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestData].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set @@ -212,45 +232,39 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert] @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestData].[dbo].[Person_Insert_OutputParameter] @FirstName, @LastName, @MiddleName, @Gender, @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1), @PersonID int' sp_describe_first_result_set --- SqlServer.2025 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' - -[TestData].[dbo].[PersonSearch] - -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestData].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestData].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -258,18 +272,12 @@ sp_describe_first_result_set -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestData].[dbo].[TableTypeTestProc] @table' +SET @tsql = N'exec [TestData].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@table [dbo].[TestTableType]' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set --- SqlServer.2025 -DECLARE @table [dbo].[TestTableType] -- Structured -- Object -SET @table = NULL - -[TestData].[dbo].[TableTypeTestProc] - -- SqlServer.2025 DECLARE @tsql NVarChar(4000) -- String SET @tsql = N'exec [TestData].[dbo].[VariableResults] @ReturnFullRow' @@ -284,6 +292,22 @@ SET @ReturnFullRow = 0 [TestData].[dbo].[VariableResults] +-- SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' + +sp_describe_first_result_set + +-- SqlServer.2025 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestData].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' + +sp_describe_first_result_set + RollbackTransaction -- SqlServer.2025 diff --git a/SqlServer.Contained.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.Contained.MS).sql b/SqlServer.Contained.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.Contained.MS).sql index 9b126448ebb1..fb47967ccae9 100644 --- a/SqlServer.Contained.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.Contained.MS).sql +++ b/SqlServer.Contained.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.Contained.MS).sql @@ -1,70 +1,86 @@ -- SqlServer.Contained.MS SqlServer.2019 -select @@version - --- SqlServer.Contained.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -84,41 +100,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') - -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -126,7 +126,7 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -134,9 +134,9 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -158,31 +158,31 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -190,53 +190,57 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSContained].[dbo].[VariableResults] + -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -258,28 +262,48 @@ SET @table = NULL -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSContained].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSContained].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMSContained].[dbo].[PersonSearch] -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.Contained.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.Contained.MS).sql b/SqlServer.Contained.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.Contained.MS).sql index 46b9daa2e94d..e2227b7336a8 100644 --- a/SqlServer.Contained.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.Contained.MS).sql +++ b/SqlServer.Contained.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.Contained.MS).sql @@ -1,182 +1,225 @@ -- SqlServer.Contained.MS SqlServer.2019 -select @@version - --- SqlServer.Contained.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') - -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSContained].[dbo].[VariableResults] + -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSContained].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSContained].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMSContained].[dbo].[PersonSearch] -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.Contained.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.Contained.MS).sql b/SqlServer.Contained.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.Contained.MS).sql index 46b9daa2e94d..e2227b7336a8 100644 --- a/SqlServer.Contained.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.Contained.MS).sql +++ b/SqlServer.Contained.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.Contained.MS).sql @@ -1,182 +1,225 @@ -- SqlServer.Contained.MS SqlServer.2019 -select @@version - --- SqlServer.Contained.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') - -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSContained].[dbo].[VariableResults] + -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSContained].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSContained].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMSContained].[dbo].[PersonSearch] -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.Contained.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.Contained.MS).sql b/SqlServer.Contained.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.Contained.MS).sql index d537925035be..8052d301a94d 100644 --- a/SqlServer.Contained.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.Contained.MS).sql +++ b/SqlServer.Contained.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.Contained.MS).sql @@ -67,183 +67,226 @@ CREATE TABLE TemporalTable4 -- SqlServer.Contained.MS SqlServer.2019 -select @@version - --- SqlServer.Contained.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -263,41 +306,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') - -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -305,7 +332,7 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -313,9 +340,9 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -337,31 +364,31 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -369,53 +396,57 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSContained].[dbo].[VariableResults] + -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -437,30 +468,50 @@ SET @table = NULL -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSContained].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSContained].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMSContained].[dbo].[PersonSearch] -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction -- SqlServer.Contained.MS SqlServer.2019 diff --git a/SqlServer.Contained.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.Contained.MS).sql b/SqlServer.Contained.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.Contained.MS).sql index 94eca0da9521..5e09687da50a 100644 --- a/SqlServer.Contained.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.Contained.MS).sql +++ b/SqlServer.Contained.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.Contained.MS).sql @@ -67,184 +67,229 @@ CREATE TABLE TemporalTable4 -- SqlServer.Contained.MS SqlServer.2019 -select @@version - --- SqlServer.Contained.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - (t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [o].[object_id] = [a_Table].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL - ) AND t.temporal_type <> 1 + [o].[is_ms_shipped] = 0 AND + [o].[type] IN (N'U', N'V') AND + ([a_Table].[object_id] IS NULL OR [a_Table].[temporal_type] <> 1 OR [a_Table].[temporal_type] IS NULL) AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -264,41 +309,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') - -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -306,7 +335,7 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -314,9 +343,9 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -338,31 +367,31 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -370,53 +399,57 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSContained].[dbo].[VariableResults] + -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -438,30 +471,50 @@ SET @table = NULL -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSContained].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSContained].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMSContained].[dbo].[PersonSearch] -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction -- SqlServer.Contained.MS SqlServer.2019 diff --git a/SqlServer.Contained.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.Contained.MS).sql b/SqlServer.Contained.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.Contained.MS).sql index 46b9daa2e94d..e2227b7336a8 100644 --- a/SqlServer.Contained.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.Contained.MS).sql +++ b/SqlServer.Contained.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.Contained.MS).sql @@ -1,182 +1,225 @@ -- SqlServer.Contained.MS SqlServer.2019 -select @@version - --- SqlServer.Contained.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') - -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSContained].[dbo].[VariableResults] + -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSContained].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSContained].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMSContained].[dbo].[PersonSearch] -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.Contained.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.Contained.MS).sql b/SqlServer.Contained.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.Contained.MS).sql index fa9396231caf..c16e5c85e880 100644 --- a/SqlServer.Contained.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.Contained.MS).sql +++ b/SqlServer.Contained.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.Contained.MS).sql @@ -1,182 +1,225 @@ -- SqlServer.Contained.MS SqlServer.2019 -select @@version - --- SqlServer.Contained.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') - -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSContained].[dbo].[VariableResults] + -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,362 +401,484 @@ SET @table = NULL -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSContained].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSContained].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMSContained].[dbo].[PersonSearch] -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -RollbackTransaction -- SqlServer.Contained.MS SqlServer.2019 -select @@version +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') -- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' -SELECT compatibility_level FROM sys.databases WHERE name = db_name() +sp_describe_first_result_set +RollbackTransaction -- SqlServer.Contained.MS SqlServer.2019 +SELECT compatibility_level FROM sys.databases WHERE name = db_name() + +-- SqlServer.Contained.MS SqlServer.2019 SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.Contained.MS SqlServer.2019 -select @@version - --- SqlServer.Contained.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.Contained.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.Contained.MS).sql b/SqlServer.Contained.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.Contained.MS).sql index fa9396231caf..c16e5c85e880 100644 --- a/SqlServer.Contained.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.Contained.MS).sql +++ b/SqlServer.Contained.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.Contained.MS).sql @@ -1,182 +1,225 @@ -- SqlServer.Contained.MS SqlServer.2019 -select @@version - --- SqlServer.Contained.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') - -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSContained].[dbo].[VariableResults] + -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,362 +401,484 @@ SET @table = NULL -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSContained].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSContained].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMSContained].[dbo].[PersonSearch] -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -RollbackTransaction -- SqlServer.Contained.MS SqlServer.2019 -select @@version +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') -- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' -SELECT compatibility_level FROM sys.databases WHERE name = db_name() +sp_describe_first_result_set +RollbackTransaction -- SqlServer.Contained.MS SqlServer.2019 +SELECT compatibility_level FROM sys.databases WHERE name = db_name() + +-- SqlServer.Contained.MS SqlServer.2019 SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.Contained.MS SqlServer.2019 -select @@version - --- SqlServer.Contained.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.Contained.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.Contained.MS).sql b/SqlServer.Contained.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.Contained.MS).sql index 31039021be4f..756e5c0eeaf0 100644 --- a/SqlServer.Contained.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.Contained.MS).sql +++ b/SqlServer.Contained.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.Contained.MS).sql @@ -7,183 +7,226 @@ FROM -- SqlServer.Contained.MS SqlServer.2019 -select @@version - --- SqlServer.Contained.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -203,41 +246,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') - -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -245,7 +272,7 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -253,9 +280,9 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -277,31 +304,31 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -309,53 +336,57 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSContained].[dbo].[VariableResults] + -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -377,16 +408,36 @@ SET @table = NULL -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMSContained].[dbo].[VariableResults] +[TestDataMSContained].[dbo].[PersonSearch] + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' + +sp_describe_first_result_set + +-- SqlServer.Contained.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set RollbackTransaction diff --git a/SqlServer.Contained.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.Contained.MS).sql b/SqlServer.Contained.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.Contained.MS).sql index d74a9483f4df..fa9550f59d3e 100644 --- a/SqlServer.Contained.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.Contained.MS).sql +++ b/SqlServer.Contained.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.Contained.MS).sql @@ -1,64 +1,92 @@ -- SqlServer.Contained.MS SqlServer.2019 -select @@version - --- SqlServer.Contained.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained.MS SqlServer.2019 - -[TestDataMSContained].[dbo].[AddIssue792Record] + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMSContained].[dbo].[DuplicateColumnNames] +[TestDataMSContained].[dbo].[QueryProcMultipleParameters] -- SqlServer.Contained.MS SqlServer.2019 DECLARE @input Int -- Int32 @@ -77,46 +105,20 @@ SET @output = 0 [TestDataMSContained].[dbo].[ExecuteProcStringParameters] -- SqlServer.Contained.MS SqlServer.2019 +DECLARE @id Int -- Int32 +SET @id = 0 -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') - --- SqlServer.Contained.MS SqlServer.2019 - -[TestDataMSContained].[dbo].[Issue1897] - --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' - -[TestDataMSContained].[dbo].[OutRefEnumTest] +[TestDataMSContained].[dbo].[Person_SelectByKey] -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestDataMSContained].[dbo].[OutRefTest] +[TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] -- SqlServer.Contained.MS SqlServer.2019 -[TestDataMSContained].[dbo].[Patient_SelectAll] +[TestDataMSContained].[dbo].[Person_SelectAll] -- SqlServer.Contained.MS SqlServer.2019 DECLARE @firstName NVarChar(50) -- String @@ -124,13 +126,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMSContained].[dbo].[Patient_SelectByName] +[TestDataMSContained].[dbo].[Person_SelectByName] -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMSContained].[dbo].[Person_Delete] +[TestDataMSContained].[dbo].[Person_SelectListByName] -- SqlServer.Contained.MS SqlServer.2019 DECLARE @FirstName NVarChar(50) -- String @@ -159,20 +163,28 @@ SET @PersonID = 0 [TestDataMSContained].[dbo].[Person_Insert_OutputParameter] -- SqlServer.Contained.MS SqlServer.2019 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestDataMSContained].[dbo].[Person_SelectAll] +[TestDataMSContained].[dbo].[Person_Update] -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @id Int -- Int32 -SET @id = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMSContained].[dbo].[Person_SelectByKey] +[TestDataMSContained].[dbo].[Person_Delete] -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @id Int -- Int32 -SET @id = 0 -[TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] +[TestDataMSContained].[dbo].[Patient_SelectAll] -- SqlServer.Contained.MS SqlServer.2019 DECLARE @firstName NVarChar(50) -- String @@ -180,61 +192,55 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMSContained].[dbo].[Person_SelectByName] +[TestDataMSContained].[dbo].[Patient_SelectByName] -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -[TestDataMSContained].[dbo].[Person_SelectListByName] +[TestDataMSContained].[dbo].[VariableResults] -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMSContained].[dbo].[Person_Update] +[TestDataMSContained].[dbo].[OutRefTest] -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMSContained].[dbo].[PersonSearch] +[TestDataMSContained].[dbo].[OutRefEnumTest] -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 -[TestDataMSContained].[dbo].[QueryProcMultipleParameters] +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestDataMSContained].[dbo].[QueryProcParameters] +[TestDataMSContained].[dbo].[SelectImplicitColumn] -- SqlServer.Contained.MS SqlServer.2019 -[TestDataMSContained].[dbo].[SelectImplicitColumn] +[TestDataMSContained].[dbo].[DuplicateColumnNames] + +-- SqlServer.Contained.MS SqlServer.2019 + +[TestDataMSContained].[dbo].[AddIssue792Record] -- SqlServer.Contained.MS SqlServer.2019 DECLARE @table [dbo].[TestTableType] -- Structured -- Object @@ -243,87 +249,121 @@ SET @table = NULL [TestDataMSContained].[dbo].[TableTypeTestProc] -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSContained].[dbo].[VariableResults] +[TestDataMSContained].[TestSchema].[TestProcedure] -- SqlServer.Contained.MS SqlServer.2019 EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMSContained].[TestSchema].[TestProcedure] +[TestDataMSContained].[dbo].[PersonSearch] -RollbackTransaction -- SqlServer.Contained.MS SqlServer.2019 -select @@version +[TestDataMSContained].[dbo].[Issue1897] -- SqlServer.Contained.MS SqlServer.2019 -SELECT compatibility_level FROM sys.databases WHERE name = db_name() +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') -- SqlServer.Contained.MS SqlServer.2019 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description -FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME +[TestDataMSContained].[dbo].[QueryProcParameters] + +RollbackTransaction +-- SqlServer.Contained.MS SqlServer.2019 + +SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' -sp_describe_first_result_set +SELECT + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -343,41 +383,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') - -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -385,7 +409,7 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -393,9 +417,9 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -417,31 +441,31 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -449,53 +473,57 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSContained].[dbo].[VariableResults] + -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -517,28 +545,48 @@ SET @table = NULL -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSContained].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSContained].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMSContained].[dbo].[PersonSearch] -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.Contained.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.Contained.MS).sql b/SqlServer.Contained.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.Contained.MS).sql index 31039021be4f..756e5c0eeaf0 100644 --- a/SqlServer.Contained.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.Contained.MS).sql +++ b/SqlServer.Contained.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.Contained.MS).sql @@ -7,183 +7,226 @@ FROM -- SqlServer.Contained.MS SqlServer.2019 -select @@version - --- SqlServer.Contained.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -203,41 +246,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') - -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -245,7 +272,7 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -253,9 +280,9 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -277,31 +304,31 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -309,53 +336,57 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSContained].[dbo].[VariableResults] + -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -377,16 +408,36 @@ SET @table = NULL -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMSContained].[dbo].[VariableResults] +[TestDataMSContained].[dbo].[PersonSearch] + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' + +sp_describe_first_result_set + +-- SqlServer.Contained.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set RollbackTransaction diff --git a/SqlServer.Contained.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.Contained.MS).sql b/SqlServer.Contained.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.Contained.MS).sql index 46b9daa2e94d..e2227b7336a8 100644 --- a/SqlServer.Contained.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.Contained.MS).sql +++ b/SqlServer.Contained.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.Contained.MS).sql @@ -1,182 +1,225 @@ -- SqlServer.Contained.MS SqlServer.2019 -select @@version - --- SqlServer.Contained.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') - -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSContained].[dbo].[VariableResults] + -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSContained].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSContained].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMSContained].[dbo].[PersonSearch] -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.Contained.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.Contained.MS).sql b/SqlServer.Contained.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.Contained.MS).sql index 46b9daa2e94d..e2227b7336a8 100644 --- a/SqlServer.Contained.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.Contained.MS).sql +++ b/SqlServer.Contained.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.Contained.MS).sql @@ -1,182 +1,225 @@ -- SqlServer.Contained.MS SqlServer.2019 -select @@version - --- SqlServer.Contained.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') - -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSContained].[dbo].[VariableResults] + -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSContained].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSContained].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMSContained].[dbo].[PersonSearch] -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.Contained.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.Contained.MS).sql b/SqlServer.Contained.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.Contained.MS).sql index 46b9daa2e94d..e2227b7336a8 100644 --- a/SqlServer.Contained.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.Contained.MS).sql +++ b/SqlServer.Contained.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.Contained.MS).sql @@ -1,182 +1,225 @@ -- SqlServer.Contained.MS SqlServer.2019 -select @@version - --- SqlServer.Contained.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') - -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSContained].[dbo].[VariableResults] + -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSContained].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSContained].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMSContained].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMSContained].[dbo].[PersonSearch] -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.Contained.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.Contained.MS).sql b/SqlServer.Contained.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.Contained.MS).sql index 038e17e75c7f..e33b09f7c362 100644 --- a/SqlServer.Contained.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.Contained.MS).sql +++ b/SqlServer.Contained.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.Contained.MS).sql @@ -7,9 +7,5 @@ FROM -- SqlServer.Contained.MS SqlServer.2019 -select @@version - --- SqlServer.Contained.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() diff --git a/SqlServer.Contained.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.Contained.MS).sql b/SqlServer.Contained.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.Contained.MS).sql index 1eb3484dc7eb..0acc0fdbe4c4 100644 --- a/SqlServer.Contained.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.Contained.MS).sql +++ b/SqlServer.Contained.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.Contained.MS).sql @@ -14,71 +14,87 @@ FROM -- SqlServer.Contained.MS SqlServer.2019 -select @@version - --- SqlServer.Contained.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -98,41 +114,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') - --- SqlServer.Contained.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') - -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -140,7 +140,7 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -148,9 +148,9 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -172,31 +172,31 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -204,53 +204,57 @@ sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSContained].[dbo].[VariableResults] + -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -272,17 +276,37 @@ SET @table = NULL -- SqlServer.Contained.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSContained].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.Contained.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMSContained].[dbo].[VariableResults] +[TestDataMSContained].[dbo].[PersonSearch] + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[Issue1897] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' + +sp_describe_first_result_set + +-- SqlServer.Contained.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set RollbackTransaction -- SqlServer.Contained.MS SqlServer.2019 diff --git a/SqlServer.Contained/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.Contained).sql b/SqlServer.Contained/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.Contained).sql index 97bdaff4f41f..acd14d952bd4 100644 --- a/SqlServer.Contained/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.Contained).sql +++ b/SqlServer.Contained/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.Contained).sql @@ -1,70 +1,86 @@ -- SqlServer.Contained SqlServer.2019 -select @@version - --- SqlServer.Contained SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -84,41 +100,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') - -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -126,7 +126,7 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -134,9 +134,9 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -158,31 +158,31 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -190,53 +190,57 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataContained].[dbo].[VariableResults] + -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -258,28 +262,48 @@ SET @table = NULL -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataContained].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataContained].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.Contained SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataContained].[dbo].[PersonSearch] -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 + +EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.Contained/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.Contained).sql b/SqlServer.Contained/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.Contained).sql index 4496561bd69e..2dce76da1b8e 100644 --- a/SqlServer.Contained/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.Contained).sql +++ b/SqlServer.Contained/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.Contained).sql @@ -1,182 +1,225 @@ -- SqlServer.Contained SqlServer.2019 -select @@version - --- SqlServer.Contained SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') - -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataContained].[dbo].[VariableResults] + -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataContained].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataContained].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.Contained SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataContained].[dbo].[PersonSearch] -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 + +EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.Contained/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.Contained).sql b/SqlServer.Contained/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.Contained).sql index 4496561bd69e..2dce76da1b8e 100644 --- a/SqlServer.Contained/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.Contained).sql +++ b/SqlServer.Contained/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.Contained).sql @@ -1,182 +1,225 @@ -- SqlServer.Contained SqlServer.2019 -select @@version - --- SqlServer.Contained SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') - -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataContained].[dbo].[VariableResults] + -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataContained].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataContained].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.Contained SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataContained].[dbo].[PersonSearch] -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 + +EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.Contained/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.Contained).sql b/SqlServer.Contained/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.Contained).sql index 1a7494ed417f..7f91132d0f47 100644 --- a/SqlServer.Contained/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.Contained).sql +++ b/SqlServer.Contained/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.Contained).sql @@ -67,183 +67,226 @@ CREATE TABLE TemporalTable4 -- SqlServer.Contained SqlServer.2019 -select @@version - --- SqlServer.Contained SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -263,41 +306,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') - -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -305,7 +332,7 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -313,9 +340,9 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -337,31 +364,31 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -369,53 +396,57 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataContained].[dbo].[VariableResults] + -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -437,30 +468,50 @@ SET @table = NULL -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataContained].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataContained].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.Contained SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataContained].[dbo].[PersonSearch] -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 + +EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction -- SqlServer.Contained SqlServer.2019 diff --git a/SqlServer.Contained/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.Contained).sql b/SqlServer.Contained/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.Contained).sql index b118856d7af4..02f8b58021e4 100644 --- a/SqlServer.Contained/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.Contained).sql +++ b/SqlServer.Contained/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.Contained).sql @@ -67,184 +67,229 @@ CREATE TABLE TemporalTable4 -- SqlServer.Contained SqlServer.2019 -select @@version - --- SqlServer.Contained SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - (t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [o].[object_id] = [a_Table].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL - ) AND t.temporal_type <> 1 + [o].[is_ms_shipped] = 0 AND + [o].[type] IN (N'U', N'V') AND + ([a_Table].[object_id] IS NULL OR [a_Table].[temporal_type] <> 1 OR [a_Table].[temporal_type] IS NULL) AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -264,41 +309,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') - -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -306,7 +335,7 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -314,9 +343,9 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -338,31 +367,31 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -370,53 +399,57 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataContained].[dbo].[VariableResults] + -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -438,30 +471,50 @@ SET @table = NULL -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataContained].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataContained].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.Contained SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataContained].[dbo].[PersonSearch] -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 + +EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction -- SqlServer.Contained SqlServer.2019 diff --git a/SqlServer.Contained/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.Contained).sql b/SqlServer.Contained/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.Contained).sql index 4496561bd69e..2dce76da1b8e 100644 --- a/SqlServer.Contained/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.Contained).sql +++ b/SqlServer.Contained/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.Contained).sql @@ -1,182 +1,225 @@ -- SqlServer.Contained SqlServer.2019 -select @@version - --- SqlServer.Contained SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') - -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataContained].[dbo].[VariableResults] + -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataContained].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataContained].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.Contained SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataContained].[dbo].[PersonSearch] -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 + +EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.Contained/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.Contained).sql b/SqlServer.Contained/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.Contained).sql index ec7504f8e177..34f11b698ffd 100644 --- a/SqlServer.Contained/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.Contained).sql +++ b/SqlServer.Contained/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.Contained).sql @@ -1,182 +1,225 @@ -- SqlServer.Contained SqlServer.2019 -select @@version - --- SqlServer.Contained SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') - -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataContained].[dbo].[VariableResults] + -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,362 +401,484 @@ SET @table = NULL -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataContained].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataContained].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.Contained SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataContained].[dbo].[PersonSearch] -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -RollbackTransaction -- SqlServer.Contained SqlServer.2019 -select @@version +EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') -- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' -SELECT compatibility_level FROM sys.databases WHERE name = db_name() +sp_describe_first_result_set +RollbackTransaction -- SqlServer.Contained SqlServer.2019 +SELECT compatibility_level FROM sys.databases WHERE name = db_name() + +-- SqlServer.Contained SqlServer.2019 SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.Contained SqlServer.2019 -select @@version - --- SqlServer.Contained SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.Contained/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.Contained).sql b/SqlServer.Contained/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.Contained).sql index ec7504f8e177..34f11b698ffd 100644 --- a/SqlServer.Contained/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.Contained).sql +++ b/SqlServer.Contained/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.Contained).sql @@ -1,182 +1,225 @@ -- SqlServer.Contained SqlServer.2019 -select @@version - --- SqlServer.Contained SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') - -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataContained].[dbo].[VariableResults] + -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,362 +401,484 @@ SET @table = NULL -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataContained].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataContained].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.Contained SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataContained].[dbo].[PersonSearch] -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -RollbackTransaction -- SqlServer.Contained SqlServer.2019 -select @@version +EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') -- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' -SELECT compatibility_level FROM sys.databases WHERE name = db_name() +sp_describe_first_result_set +RollbackTransaction -- SqlServer.Contained SqlServer.2019 +SELECT compatibility_level FROM sys.databases WHERE name = db_name() + +-- SqlServer.Contained SqlServer.2019 SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.Contained SqlServer.2019 -select @@version - --- SqlServer.Contained SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.Contained/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.Contained).sql b/SqlServer.Contained/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.Contained).sql index 83e278d80e00..94ca57f6dcb7 100644 --- a/SqlServer.Contained/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.Contained).sql +++ b/SqlServer.Contained/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.Contained).sql @@ -7,183 +7,226 @@ FROM -- SqlServer.Contained SqlServer.2019 -select @@version - --- SqlServer.Contained SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -203,41 +246,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') - -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -245,7 +272,7 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -253,9 +280,9 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -277,31 +304,31 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -309,53 +336,57 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataContained].[dbo].[VariableResults] + -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -377,16 +408,36 @@ SET @table = NULL -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataContained].[dbo].[VariableResults] +[TestDataContained].[dbo].[PersonSearch] + +-- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' + +sp_describe_first_result_set + +-- SqlServer.Contained SqlServer.2019 + +EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set RollbackTransaction diff --git a/SqlServer.Contained/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.Contained).sql b/SqlServer.Contained/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.Contained).sql index e5f027eb50e0..7561ae8cd611 100644 --- a/SqlServer.Contained/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.Contained).sql +++ b/SqlServer.Contained/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.Contained).sql @@ -1,64 +1,92 @@ -- SqlServer.Contained SqlServer.2019 -select @@version - --- SqlServer.Contained SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained SqlServer.2019 - -[TestDataContained].[dbo].[AddIssue792Record] + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataContained].[dbo].[DuplicateColumnNames] +[TestDataContained].[dbo].[QueryProcMultipleParameters] -- SqlServer.Contained SqlServer.2019 DECLARE @input Int -- Int32 @@ -77,46 +105,20 @@ SET @output = 0 [TestDataContained].[dbo].[ExecuteProcStringParameters] -- SqlServer.Contained SqlServer.2019 +DECLARE @id Int -- Int32 +SET @id = 0 -EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') - --- SqlServer.Contained SqlServer.2019 - -[TestDataContained].[dbo].[Issue1897] - --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') - --- SqlServer.Contained SqlServer.2019 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' - -[TestDataContained].[dbo].[OutRefEnumTest] +[TestDataContained].[dbo].[Person_SelectByKey] -- SqlServer.Contained SqlServer.2019 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestDataContained].[dbo].[OutRefTest] +[TestDataContained].[dbo].[Person_SelectByKeyLowercase] -- SqlServer.Contained SqlServer.2019 -[TestDataContained].[dbo].[Patient_SelectAll] +[TestDataContained].[dbo].[Person_SelectAll] -- SqlServer.Contained SqlServer.2019 DECLARE @firstName NVarChar(50) -- String @@ -124,13 +126,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataContained].[dbo].[Patient_SelectByName] +[TestDataContained].[dbo].[Person_SelectByName] -- SqlServer.Contained SqlServer.2019 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataContained].[dbo].[Person_Delete] +[TestDataContained].[dbo].[Person_SelectListByName] -- SqlServer.Contained SqlServer.2019 DECLARE @FirstName NVarChar(50) -- String @@ -159,20 +163,28 @@ SET @PersonID = 0 [TestDataContained].[dbo].[Person_Insert_OutputParameter] -- SqlServer.Contained SqlServer.2019 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestDataContained].[dbo].[Person_SelectAll] +[TestDataContained].[dbo].[Person_Update] -- SqlServer.Contained SqlServer.2019 -DECLARE @id Int -- Int32 -SET @id = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataContained].[dbo].[Person_SelectByKey] +[TestDataContained].[dbo].[Person_Delete] -- SqlServer.Contained SqlServer.2019 -DECLARE @id Int -- Int32 -SET @id = 0 -[TestDataContained].[dbo].[Person_SelectByKeyLowercase] +[TestDataContained].[dbo].[Patient_SelectAll] -- SqlServer.Contained SqlServer.2019 DECLARE @firstName NVarChar(50) -- String @@ -180,61 +192,55 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataContained].[dbo].[Person_SelectByName] +[TestDataContained].[dbo].[Patient_SelectByName] -- SqlServer.Contained SqlServer.2019 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -[TestDataContained].[dbo].[Person_SelectListByName] +[TestDataContained].[dbo].[VariableResults] -- SqlServer.Contained SqlServer.2019 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataContained].[dbo].[Person_Update] +[TestDataContained].[dbo].[OutRefTest] -- SqlServer.Contained SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataContained].[dbo].[PersonSearch] +[TestDataContained].[dbo].[OutRefEnumTest] -- SqlServer.Contained SqlServer.2019 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 -[TestDataContained].[dbo].[QueryProcMultipleParameters] +EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained SqlServer.2019 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestDataContained].[dbo].[QueryProcParameters] +[TestDataContained].[dbo].[SelectImplicitColumn] -- SqlServer.Contained SqlServer.2019 -[TestDataContained].[dbo].[SelectImplicitColumn] +[TestDataContained].[dbo].[DuplicateColumnNames] + +-- SqlServer.Contained SqlServer.2019 + +[TestDataContained].[dbo].[AddIssue792Record] -- SqlServer.Contained SqlServer.2019 DECLARE @table [dbo].[TestTableType] -- Structured -- Object @@ -243,87 +249,121 @@ SET @table = NULL [TestDataContained].[dbo].[TableTypeTestProc] -- SqlServer.Contained SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataContained].[dbo].[VariableResults] +[TestDataContained].[TestSchema].[TestProcedure] -- SqlServer.Contained SqlServer.2019 EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataContained].[TestSchema].[TestProcedure] +[TestDataContained].[dbo].[PersonSearch] -RollbackTransaction -- SqlServer.Contained SqlServer.2019 -select @@version +[TestDataContained].[dbo].[Issue1897] -- SqlServer.Contained SqlServer.2019 -SELECT compatibility_level FROM sys.databases WHERE name = db_name() +EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') -- SqlServer.Contained SqlServer.2019 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description -FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME +[TestDataContained].[dbo].[QueryProcParameters] + +RollbackTransaction +-- SqlServer.Contained SqlServer.2019 + +SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' -sp_describe_first_result_set +SELECT + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -343,41 +383,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') - -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -385,7 +409,7 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -393,9 +417,9 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -417,31 +441,31 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -449,53 +473,57 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataContained].[dbo].[VariableResults] + -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -517,28 +545,48 @@ SET @table = NULL -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataContained].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataContained].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.Contained SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataContained].[dbo].[PersonSearch] -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 + +EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.Contained/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.Contained).sql b/SqlServer.Contained/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.Contained).sql index 83e278d80e00..94ca57f6dcb7 100644 --- a/SqlServer.Contained/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.Contained).sql +++ b/SqlServer.Contained/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.Contained).sql @@ -7,183 +7,226 @@ FROM -- SqlServer.Contained SqlServer.2019 -select @@version - --- SqlServer.Contained SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -203,41 +246,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') - -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -245,7 +272,7 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -253,9 +280,9 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -277,31 +304,31 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -309,53 +336,57 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataContained].[dbo].[VariableResults] + -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -377,16 +408,36 @@ SET @table = NULL -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataContained].[dbo].[VariableResults] +[TestDataContained].[dbo].[PersonSearch] + +-- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' + +sp_describe_first_result_set + +-- SqlServer.Contained SqlServer.2019 + +EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set RollbackTransaction diff --git a/SqlServer.Contained/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.Contained).sql b/SqlServer.Contained/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.Contained).sql index 4496561bd69e..2dce76da1b8e 100644 --- a/SqlServer.Contained/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.Contained).sql +++ b/SqlServer.Contained/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.Contained).sql @@ -1,182 +1,225 @@ -- SqlServer.Contained SqlServer.2019 -select @@version - --- SqlServer.Contained SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') - -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataContained].[dbo].[VariableResults] + -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataContained].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataContained].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.Contained SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataContained].[dbo].[PersonSearch] -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 + +EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.Contained/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.Contained).sql b/SqlServer.Contained/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.Contained).sql index 4496561bd69e..2dce76da1b8e 100644 --- a/SqlServer.Contained/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.Contained).sql +++ b/SqlServer.Contained/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.Contained).sql @@ -1,182 +1,225 @@ -- SqlServer.Contained SqlServer.2019 -select @@version - --- SqlServer.Contained SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') - -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataContained].[dbo].[VariableResults] + -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataContained].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataContained].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.Contained SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataContained].[dbo].[PersonSearch] -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 + +EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.Contained/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.Contained).sql b/SqlServer.Contained/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.Contained).sql index 4496561bd69e..2dce76da1b8e 100644 --- a/SqlServer.Contained/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.Contained).sql +++ b/SqlServer.Contained/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.Contained).sql @@ -1,182 +1,225 @@ -- SqlServer.Contained SqlServer.2019 -select @@version - --- SqlServer.Contained SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Contained SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') - -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataContained].[dbo].[VariableResults] + -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataContained].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataContained].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataContained].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.Contained SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataContained].[dbo].[PersonSearch] -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 + +EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.Contained/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.Contained).sql b/SqlServer.Contained/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.Contained).sql index 67190cdf52a4..16a2d7e73a30 100644 --- a/SqlServer.Contained/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.Contained).sql +++ b/SqlServer.Contained/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.Contained).sql @@ -7,9 +7,5 @@ FROM -- SqlServer.Contained SqlServer.2019 -select @@version - --- SqlServer.Contained SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() diff --git a/SqlServer.Contained/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.Contained).sql b/SqlServer.Contained/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.Contained).sql index ee132f5f70a5..8e2006c1a136 100644 --- a/SqlServer.Contained/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.Contained).sql +++ b/SqlServer.Contained/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.Contained).sql @@ -14,71 +14,87 @@ FROM -- SqlServer.Contained SqlServer.2019 -select @@version - --- SqlServer.Contained SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -98,41 +114,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') - --- SqlServer.Contained SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.Contained SqlServer.2019 - -EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') - -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -140,7 +140,7 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -148,9 +148,9 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -172,31 +172,31 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -204,53 +204,57 @@ sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.Contained SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataContained].[dbo].[VariableResults] + -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataContained].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataContained].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataContained].[dbo].[GetParentByID](NULL)') -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataContained].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataContained].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -272,17 +276,37 @@ SET @table = NULL -- SqlServer.Contained SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataContained].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataContained].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.Contained SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataContained].[dbo].[VariableResults] +[TestDataContained].[dbo].[PersonSearch] + +-- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[Issue1897] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' + +sp_describe_first_result_set + +-- SqlServer.Contained SqlServer.2019 + +EXEC('SELECT * FROM [TestDataContained].[dbo].[Issue1921]()') + +-- SqlServer.Contained SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataContained].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set RollbackTransaction -- SqlServer.Contained SqlServer.2019 diff --git a/SqlServer.Northwind.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.ForeignKeyMemberNameTest2(SqlServer.Northwind.MS).sql b/SqlServer.Northwind.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.ForeignKeyMemberNameTest2(SqlServer.Northwind.MS).sql index ecdfce9f34d9..4d2a06ef07be 100644 --- a/SqlServer.Northwind.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.ForeignKeyMemberNameTest2(SqlServer.Northwind.MS).sql +++ b/SqlServer.Northwind.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.ForeignKeyMemberNameTest2(SqlServer.Northwind.MS).sql @@ -1,188 +1,239 @@ -- SqlServer.Northwind.MS SqlServer.2019 -select @@version - --- SqlServer.Northwind.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Northwind.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Northwind.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Northwind.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Northwind.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Northwind.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Northwind.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Northwind.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [NorthwindMS].[dbo].[CustOrderHist] @CustomerID' +SET @tsql = N'exec [NorthwindMS].[dbo].[SalesByCategory] @CategoryName, @OrdYear' DECLARE @params NVarChar(4000) -- String -SET @params = N'@CustomerID nchar(5)' +SET @params = N'@CategoryName nvarchar(15), @OrdYear nvarchar(4)' sp_describe_first_result_set -- SqlServer.Northwind.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [NorthwindMS].[dbo].[CustOrdersDetail] @OrderID' +SET @tsql = N'exec [NorthwindMS].[dbo].[CustOrdersOrders] @CustomerID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@OrderID int' +SET @params = N'@CustomerID nchar(5)' sp_describe_first_result_set -- SqlServer.Northwind.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [NorthwindMS].[dbo].[CustOrdersOrders] @CustomerID' +SET @tsql = N'exec [NorthwindMS].[dbo].[CustOrderHist] @CustomerID' DECLARE @params NVarChar(4000) -- String SET @params = N'@CustomerID nchar(5)' @@ -190,33 +241,33 @@ sp_describe_first_result_set -- SqlServer.Northwind.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [NorthwindMS].[dbo].[Employee Sales by Country] @Beginning_Date, @Ending_Date' +SET @tsql = N'exec [NorthwindMS].[dbo].[CustOrdersDetail] @OrderID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@Beginning_Date datetime, @Ending_Date datetime' +SET @params = N'@OrderID int' sp_describe_first_result_set -- SqlServer.Northwind.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [NorthwindMS].[dbo].[Sales by Year] @Beginning_Date, @Ending_Date' +SET @tsql = N'exec [NorthwindMS].[dbo].[Ten Most Expensive Products] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@Beginning_Date datetime, @Ending_Date datetime' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Northwind.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [NorthwindMS].[dbo].[SalesByCategory] @CategoryName, @OrdYear' +SET @tsql = N'exec [NorthwindMS].[dbo].[Sales by Year] @Beginning_Date, @Ending_Date' DECLARE @params NVarChar(4000) -- String -SET @params = N'@CategoryName nvarchar(15), @OrdYear nvarchar(4)' +SET @params = N'@Beginning_Date datetime, @Ending_Date datetime' sp_describe_first_result_set -- SqlServer.Northwind.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [NorthwindMS].[dbo].[Ten Most Expensive Products] ' +SET @tsql = N'exec [NorthwindMS].[dbo].[Employee Sales by Country] @Beginning_Date, @Ending_Date' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@Beginning_Date datetime, @Ending_Date datetime' sp_describe_first_result_set diff --git a/SqlServer.Northwind.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.NorthwindTest(SqlServer.Northwind.MS).sql b/SqlServer.Northwind.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.NorthwindTest(SqlServer.Northwind.MS).sql index ecdfce9f34d9..4d2a06ef07be 100644 --- a/SqlServer.Northwind.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.NorthwindTest(SqlServer.Northwind.MS).sql +++ b/SqlServer.Northwind.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.NorthwindTest(SqlServer.Northwind.MS).sql @@ -1,188 +1,239 @@ -- SqlServer.Northwind.MS SqlServer.2019 -select @@version - --- SqlServer.Northwind.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Northwind.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Northwind.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Northwind.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Northwind.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Northwind.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Northwind.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Northwind.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [NorthwindMS].[dbo].[CustOrderHist] @CustomerID' +SET @tsql = N'exec [NorthwindMS].[dbo].[SalesByCategory] @CategoryName, @OrdYear' DECLARE @params NVarChar(4000) -- String -SET @params = N'@CustomerID nchar(5)' +SET @params = N'@CategoryName nvarchar(15), @OrdYear nvarchar(4)' sp_describe_first_result_set -- SqlServer.Northwind.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [NorthwindMS].[dbo].[CustOrdersDetail] @OrderID' +SET @tsql = N'exec [NorthwindMS].[dbo].[CustOrdersOrders] @CustomerID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@OrderID int' +SET @params = N'@CustomerID nchar(5)' sp_describe_first_result_set -- SqlServer.Northwind.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [NorthwindMS].[dbo].[CustOrdersOrders] @CustomerID' +SET @tsql = N'exec [NorthwindMS].[dbo].[CustOrderHist] @CustomerID' DECLARE @params NVarChar(4000) -- String SET @params = N'@CustomerID nchar(5)' @@ -190,33 +241,33 @@ sp_describe_first_result_set -- SqlServer.Northwind.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [NorthwindMS].[dbo].[Employee Sales by Country] @Beginning_Date, @Ending_Date' +SET @tsql = N'exec [NorthwindMS].[dbo].[CustOrdersDetail] @OrderID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@Beginning_Date datetime, @Ending_Date datetime' +SET @params = N'@OrderID int' sp_describe_first_result_set -- SqlServer.Northwind.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [NorthwindMS].[dbo].[Sales by Year] @Beginning_Date, @Ending_Date' +SET @tsql = N'exec [NorthwindMS].[dbo].[Ten Most Expensive Products] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@Beginning_Date datetime, @Ending_Date datetime' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Northwind.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [NorthwindMS].[dbo].[SalesByCategory] @CategoryName, @OrdYear' +SET @tsql = N'exec [NorthwindMS].[dbo].[Sales by Year] @Beginning_Date, @Ending_Date' DECLARE @params NVarChar(4000) -- String -SET @params = N'@CategoryName nvarchar(15), @OrdYear nvarchar(4)' +SET @params = N'@Beginning_Date datetime, @Ending_Date datetime' sp_describe_first_result_set -- SqlServer.Northwind.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [NorthwindMS].[dbo].[Ten Most Expensive Products] ' +SET @tsql = N'exec [NorthwindMS].[dbo].[Employee Sales by Country] @Beginning_Date, @Ending_Date' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@Beginning_Date datetime, @Ending_Date datetime' sp_describe_first_result_set diff --git a/SqlServer.Northwind/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.ForeignKeyMemberNameTest2(SqlServer.Northwind).sql b/SqlServer.Northwind/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.ForeignKeyMemberNameTest2(SqlServer.Northwind).sql index d1d86ac94193..a80414ba76a3 100644 --- a/SqlServer.Northwind/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.ForeignKeyMemberNameTest2(SqlServer.Northwind).sql +++ b/SqlServer.Northwind/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.ForeignKeyMemberNameTest2(SqlServer.Northwind).sql @@ -1,188 +1,239 @@ -- SqlServer.Northwind SqlServer.2019 -select @@version - --- SqlServer.Northwind SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Northwind SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Northwind SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Northwind SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Northwind SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Northwind SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Northwind SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Northwind SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [Northwind].[dbo].[CustOrderHist] @CustomerID' +SET @tsql = N'exec [Northwind].[dbo].[SalesByCategory] @CategoryName, @OrdYear' DECLARE @params NVarChar(4000) -- String -SET @params = N'@CustomerID nchar(5)' +SET @params = N'@CategoryName nvarchar(15), @OrdYear nvarchar(4)' sp_describe_first_result_set -- SqlServer.Northwind SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [Northwind].[dbo].[CustOrdersDetail] @OrderID' +SET @tsql = N'exec [Northwind].[dbo].[CustOrdersOrders] @CustomerID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@OrderID int' +SET @params = N'@CustomerID nchar(5)' sp_describe_first_result_set -- SqlServer.Northwind SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [Northwind].[dbo].[CustOrdersOrders] @CustomerID' +SET @tsql = N'exec [Northwind].[dbo].[CustOrderHist] @CustomerID' DECLARE @params NVarChar(4000) -- String SET @params = N'@CustomerID nchar(5)' @@ -190,33 +241,33 @@ sp_describe_first_result_set -- SqlServer.Northwind SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [Northwind].[dbo].[Employee Sales by Country] @Beginning_Date, @Ending_Date' +SET @tsql = N'exec [Northwind].[dbo].[CustOrdersDetail] @OrderID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@Beginning_Date datetime, @Ending_Date datetime' +SET @params = N'@OrderID int' sp_describe_first_result_set -- SqlServer.Northwind SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [Northwind].[dbo].[Sales by Year] @Beginning_Date, @Ending_Date' +SET @tsql = N'exec [Northwind].[dbo].[Ten Most Expensive Products] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@Beginning_Date datetime, @Ending_Date datetime' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Northwind SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [Northwind].[dbo].[SalesByCategory] @CategoryName, @OrdYear' +SET @tsql = N'exec [Northwind].[dbo].[Sales by Year] @Beginning_Date, @Ending_Date' DECLARE @params NVarChar(4000) -- String -SET @params = N'@CategoryName nvarchar(15), @OrdYear nvarchar(4)' +SET @params = N'@Beginning_Date datetime, @Ending_Date datetime' sp_describe_first_result_set -- SqlServer.Northwind SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [Northwind].[dbo].[Ten Most Expensive Products] ' +SET @tsql = N'exec [Northwind].[dbo].[Employee Sales by Country] @Beginning_Date, @Ending_Date' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@Beginning_Date datetime, @Ending_Date datetime' sp_describe_first_result_set diff --git a/SqlServer.Northwind/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.NorthwindTest(SqlServer.Northwind).sql b/SqlServer.Northwind/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.NorthwindTest(SqlServer.Northwind).sql index d1d86ac94193..a80414ba76a3 100644 --- a/SqlServer.Northwind/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.NorthwindTest(SqlServer.Northwind).sql +++ b/SqlServer.Northwind/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.NorthwindTest(SqlServer.Northwind).sql @@ -1,188 +1,239 @@ -- SqlServer.Northwind SqlServer.2019 -select @@version - --- SqlServer.Northwind SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.Northwind SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.Northwind SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Northwind SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.Northwind SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.Northwind SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.Northwind SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.Northwind SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [Northwind].[dbo].[CustOrderHist] @CustomerID' +SET @tsql = N'exec [Northwind].[dbo].[SalesByCategory] @CategoryName, @OrdYear' DECLARE @params NVarChar(4000) -- String -SET @params = N'@CustomerID nchar(5)' +SET @params = N'@CategoryName nvarchar(15), @OrdYear nvarchar(4)' sp_describe_first_result_set -- SqlServer.Northwind SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [Northwind].[dbo].[CustOrdersDetail] @OrderID' +SET @tsql = N'exec [Northwind].[dbo].[CustOrdersOrders] @CustomerID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@OrderID int' +SET @params = N'@CustomerID nchar(5)' sp_describe_first_result_set -- SqlServer.Northwind SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [Northwind].[dbo].[CustOrdersOrders] @CustomerID' +SET @tsql = N'exec [Northwind].[dbo].[CustOrderHist] @CustomerID' DECLARE @params NVarChar(4000) -- String SET @params = N'@CustomerID nchar(5)' @@ -190,33 +241,33 @@ sp_describe_first_result_set -- SqlServer.Northwind SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [Northwind].[dbo].[Employee Sales by Country] @Beginning_Date, @Ending_Date' +SET @tsql = N'exec [Northwind].[dbo].[CustOrdersDetail] @OrderID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@Beginning_Date datetime, @Ending_Date datetime' +SET @params = N'@OrderID int' sp_describe_first_result_set -- SqlServer.Northwind SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [Northwind].[dbo].[Sales by Year] @Beginning_Date, @Ending_Date' +SET @tsql = N'exec [Northwind].[dbo].[Ten Most Expensive Products] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@Beginning_Date datetime, @Ending_Date datetime' +SET @params = N'' sp_describe_first_result_set -- SqlServer.Northwind SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [Northwind].[dbo].[SalesByCategory] @CategoryName, @OrdYear' +SET @tsql = N'exec [Northwind].[dbo].[Sales by Year] @Beginning_Date, @Ending_Date' DECLARE @params NVarChar(4000) -- String -SET @params = N'@CategoryName nvarchar(15), @OrdYear nvarchar(4)' +SET @params = N'@Beginning_Date datetime, @Ending_Date datetime' sp_describe_first_result_set -- SqlServer.Northwind SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [Northwind].[dbo].[Ten Most Expensive Products] ' +SET @tsql = N'exec [Northwind].[dbo].[Employee Sales by Country] @Beginning_Date, @Ending_Date' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@Beginning_Date datetime, @Ending_Date datetime' sp_describe_first_result_set diff --git a/SqlServer.SA.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.SA.MS).sql b/SqlServer.SA.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.SA.MS).sql index 30e3467bd5f2..8c30446ddd3c 100644 --- a/SqlServer.SA.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.SA.MS).sql +++ b/SqlServer.SA.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.SA.MS).sql @@ -1,70 +1,86 @@ -- SqlServer.SA.MS SqlServer.2019 -select @@version - --- SqlServer.SA.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -84,41 +100,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') - -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -126,7 +126,7 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -134,9 +134,9 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -158,31 +158,31 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -190,53 +190,57 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSSA].[dbo].[VariableResults] + -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -258,28 +262,48 @@ SET @table = NULL -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSSA].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSSA].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMSSA].[dbo].[PersonSearch] -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.SA.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.SA.MS).sql b/SqlServer.SA.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.SA.MS).sql index cbac6c66342f..816b4de36fac 100644 --- a/SqlServer.SA.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.SA.MS).sql +++ b/SqlServer.SA.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.SA.MS).sql @@ -1,182 +1,225 @@ -- SqlServer.SA.MS SqlServer.2019 -select @@version - --- SqlServer.SA.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') - -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSSA].[dbo].[VariableResults] + -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSSA].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSSA].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMSSA].[dbo].[PersonSearch] -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.SA.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.SA.MS).sql b/SqlServer.SA.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.SA.MS).sql index cbac6c66342f..816b4de36fac 100644 --- a/SqlServer.SA.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.SA.MS).sql +++ b/SqlServer.SA.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.SA.MS).sql @@ -1,182 +1,225 @@ -- SqlServer.SA.MS SqlServer.2019 -select @@version - --- SqlServer.SA.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') - -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSSA].[dbo].[VariableResults] + -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSSA].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSSA].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMSSA].[dbo].[PersonSearch] -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.SA.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.SA.MS).sql b/SqlServer.SA.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.SA.MS).sql index fa21462210be..ac55f4640f68 100644 --- a/SqlServer.SA.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.SA.MS).sql +++ b/SqlServer.SA.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.SA.MS).sql @@ -67,183 +67,226 @@ CREATE TABLE TemporalTable4 -- SqlServer.SA.MS SqlServer.2019 -select @@version - --- SqlServer.SA.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -263,41 +306,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') - -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -305,7 +332,7 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -313,9 +340,9 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -337,31 +364,31 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -369,53 +396,57 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSSA].[dbo].[VariableResults] + -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -437,30 +468,50 @@ SET @table = NULL -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSSA].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSSA].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMSSA].[dbo].[PersonSearch] -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction -- SqlServer.SA.MS SqlServer.2019 diff --git a/SqlServer.SA.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.SA.MS).sql b/SqlServer.SA.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.SA.MS).sql index 10710b14102f..f8e037dfd62d 100644 --- a/SqlServer.SA.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.SA.MS).sql +++ b/SqlServer.SA.MS/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.SA.MS).sql @@ -67,184 +67,229 @@ CREATE TABLE TemporalTable4 -- SqlServer.SA.MS SqlServer.2019 -select @@version - --- SqlServer.SA.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - (t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [o].[object_id] = [a_Table].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL - ) AND t.temporal_type <> 1 + [o].[is_ms_shipped] = 0 AND + [o].[type] IN (N'U', N'V') AND + ([a_Table].[object_id] IS NULL OR [a_Table].[temporal_type] <> 1 OR [a_Table].[temporal_type] IS NULL) AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -264,41 +309,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') - -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -306,7 +335,7 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -314,9 +343,9 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -338,31 +367,31 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -370,53 +399,57 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSSA].[dbo].[VariableResults] + -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -438,30 +471,50 @@ SET @table = NULL -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSSA].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSSA].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMSSA].[dbo].[PersonSearch] -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction -- SqlServer.SA.MS SqlServer.2019 diff --git a/SqlServer.SA.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.SA.MS).sql b/SqlServer.SA.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.SA.MS).sql index cbac6c66342f..816b4de36fac 100644 --- a/SqlServer.SA.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.SA.MS).sql +++ b/SqlServer.SA.MS/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.SA.MS).sql @@ -1,182 +1,225 @@ -- SqlServer.SA.MS SqlServer.2019 -select @@version - --- SqlServer.SA.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') - -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSSA].[dbo].[VariableResults] + -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSSA].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSSA].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMSSA].[dbo].[PersonSearch] -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.SA.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.SA.MS).sql b/SqlServer.SA.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.SA.MS).sql index d09ef9b5ae5d..f47cf20856cc 100644 --- a/SqlServer.SA.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.SA.MS).sql +++ b/SqlServer.SA.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.SA.MS).sql @@ -1,182 +1,225 @@ -- SqlServer.SA.MS SqlServer.2019 -select @@version - --- SqlServer.SA.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') - -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSSA].[dbo].[VariableResults] + -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,362 +401,484 @@ SET @table = NULL -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSSA].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSSA].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMSSA].[dbo].[PersonSearch] -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -RollbackTransaction -- SqlServer.SA.MS SqlServer.2019 -select @@version +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') -- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' -SELECT compatibility_level FROM sys.databases WHERE name = db_name() +sp_describe_first_result_set +RollbackTransaction -- SqlServer.SA.MS SqlServer.2019 +SELECT compatibility_level FROM sys.databases WHERE name = db_name() + +-- SqlServer.SA.MS SqlServer.2019 SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.SA.MS SqlServer.2019 -select @@version - --- SqlServer.SA.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.SA.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.SA.MS).sql b/SqlServer.SA.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.SA.MS).sql index d09ef9b5ae5d..f47cf20856cc 100644 --- a/SqlServer.SA.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.SA.MS).sql +++ b/SqlServer.SA.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.SA.MS).sql @@ -1,182 +1,225 @@ -- SqlServer.SA.MS SqlServer.2019 -select @@version - --- SqlServer.SA.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') - -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSSA].[dbo].[VariableResults] + -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,362 +401,484 @@ SET @table = NULL -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSSA].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSSA].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMSSA].[dbo].[PersonSearch] -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -RollbackTransaction -- SqlServer.SA.MS SqlServer.2019 -select @@version +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') -- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' -SELECT compatibility_level FROM sys.databases WHERE name = db_name() +sp_describe_first_result_set +RollbackTransaction -- SqlServer.SA.MS SqlServer.2019 +SELECT compatibility_level FROM sys.databases WHERE name = db_name() + +-- SqlServer.SA.MS SqlServer.2019 SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.SA.MS SqlServer.2019 -select @@version - --- SqlServer.SA.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.SA.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.SA.MS).sql b/SqlServer.SA.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.SA.MS).sql index 35a3b06f3de4..c42c1fddc349 100644 --- a/SqlServer.SA.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.SA.MS).sql +++ b/SqlServer.SA.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.SA.MS).sql @@ -7,183 +7,226 @@ FROM -- SqlServer.SA.MS SqlServer.2019 -select @@version - --- SqlServer.SA.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -203,41 +246,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') - -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -245,7 +272,7 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -253,9 +280,9 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -277,31 +304,31 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -309,53 +336,57 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSSA].[dbo].[VariableResults] + -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -377,16 +408,36 @@ SET @table = NULL -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMSSA].[dbo].[VariableResults] +[TestDataMSSA].[dbo].[PersonSearch] + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' + +sp_describe_first_result_set + +-- SqlServer.SA.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set RollbackTransaction diff --git a/SqlServer.SA.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.SA.MS).sql b/SqlServer.SA.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.SA.MS).sql index 63d955010754..4160ca216047 100644 --- a/SqlServer.SA.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.SA.MS).sql +++ b/SqlServer.SA.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.SA.MS).sql @@ -1,64 +1,92 @@ -- SqlServer.SA.MS SqlServer.2019 -select @@version - --- SqlServer.SA.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA.MS SqlServer.2019 - -[TestDataMSSA].[dbo].[AddIssue792Record] + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataMSSA].[dbo].[DuplicateColumnNames] +[TestDataMSSA].[dbo].[QueryProcMultipleParameters] -- SqlServer.SA.MS SqlServer.2019 DECLARE @input Int -- Int32 @@ -77,46 +105,20 @@ SET @output = 0 [TestDataMSSA].[dbo].[ExecuteProcStringParameters] -- SqlServer.SA.MS SqlServer.2019 +DECLARE @id Int -- Int32 +SET @id = 0 -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') - --- SqlServer.SA.MS SqlServer.2019 - -[TestDataMSSA].[dbo].[Issue1897] - --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' - -[TestDataMSSA].[dbo].[OutRefEnumTest] +[TestDataMSSA].[dbo].[Person_SelectByKey] -- SqlServer.SA.MS SqlServer.2019 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestDataMSSA].[dbo].[OutRefTest] +[TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] -- SqlServer.SA.MS SqlServer.2019 -[TestDataMSSA].[dbo].[Patient_SelectAll] +[TestDataMSSA].[dbo].[Person_SelectAll] -- SqlServer.SA.MS SqlServer.2019 DECLARE @firstName NVarChar(50) -- String @@ -124,13 +126,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMSSA].[dbo].[Patient_SelectByName] +[TestDataMSSA].[dbo].[Person_SelectByName] -- SqlServer.SA.MS SqlServer.2019 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataMSSA].[dbo].[Person_Delete] +[TestDataMSSA].[dbo].[Person_SelectListByName] -- SqlServer.SA.MS SqlServer.2019 DECLARE @FirstName NVarChar(50) -- String @@ -159,20 +163,28 @@ SET @PersonID = 0 [TestDataMSSA].[dbo].[Person_Insert_OutputParameter] -- SqlServer.SA.MS SqlServer.2019 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestDataMSSA].[dbo].[Person_SelectAll] +[TestDataMSSA].[dbo].[Person_Update] -- SqlServer.SA.MS SqlServer.2019 -DECLARE @id Int -- Int32 -SET @id = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataMSSA].[dbo].[Person_SelectByKey] +[TestDataMSSA].[dbo].[Person_Delete] -- SqlServer.SA.MS SqlServer.2019 -DECLARE @id Int -- Int32 -SET @id = 0 -[TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] +[TestDataMSSA].[dbo].[Patient_SelectAll] -- SqlServer.SA.MS SqlServer.2019 DECLARE @firstName NVarChar(50) -- String @@ -180,61 +192,55 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataMSSA].[dbo].[Person_SelectByName] +[TestDataMSSA].[dbo].[Patient_SelectByName] -- SqlServer.SA.MS SqlServer.2019 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -[TestDataMSSA].[dbo].[Person_SelectListByName] +[TestDataMSSA].[dbo].[VariableResults] -- SqlServer.SA.MS SqlServer.2019 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMSSA].[dbo].[Person_Update] +[TestDataMSSA].[dbo].[OutRefTest] -- SqlServer.SA.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataMSSA].[dbo].[PersonSearch] +[TestDataMSSA].[dbo].[OutRefEnumTest] -- SqlServer.SA.MS SqlServer.2019 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 -[TestDataMSSA].[dbo].[QueryProcMultipleParameters] +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA.MS SqlServer.2019 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestDataMSSA].[dbo].[QueryProcParameters] +[TestDataMSSA].[dbo].[SelectImplicitColumn] -- SqlServer.SA.MS SqlServer.2019 -[TestDataMSSA].[dbo].[SelectImplicitColumn] +[TestDataMSSA].[dbo].[DuplicateColumnNames] + +-- SqlServer.SA.MS SqlServer.2019 + +[TestDataMSSA].[dbo].[AddIssue792Record] -- SqlServer.SA.MS SqlServer.2019 DECLARE @table [dbo].[TestTableType] -- Structured -- Object @@ -243,87 +249,121 @@ SET @table = NULL [TestDataMSSA].[dbo].[TableTypeTestProc] -- SqlServer.SA.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSSA].[dbo].[VariableResults] +[TestDataMSSA].[TestSchema].[TestProcedure] -- SqlServer.SA.MS SqlServer.2019 EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMSSA].[TestSchema].[TestProcedure] +[TestDataMSSA].[dbo].[PersonSearch] -RollbackTransaction -- SqlServer.SA.MS SqlServer.2019 -select @@version +[TestDataMSSA].[dbo].[Issue1897] -- SqlServer.SA.MS SqlServer.2019 -SELECT compatibility_level FROM sys.databases WHERE name = db_name() +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') -- SqlServer.SA.MS SqlServer.2019 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description -FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME +[TestDataMSSA].[dbo].[QueryProcParameters] + +RollbackTransaction +-- SqlServer.SA.MS SqlServer.2019 + +SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' -sp_describe_first_result_set +SELECT + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -343,41 +383,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') - -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -385,7 +409,7 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -393,9 +417,9 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -417,31 +441,31 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -449,53 +473,57 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSSA].[dbo].[VariableResults] + -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -517,28 +545,48 @@ SET @table = NULL -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSSA].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSSA].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMSSA].[dbo].[PersonSearch] -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.SA.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.SA.MS).sql b/SqlServer.SA.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.SA.MS).sql index 35a3b06f3de4..c42c1fddc349 100644 --- a/SqlServer.SA.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.SA.MS).sql +++ b/SqlServer.SA.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.SA.MS).sql @@ -7,183 +7,226 @@ FROM -- SqlServer.SA.MS SqlServer.2019 -select @@version - --- SqlServer.SA.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -203,41 +246,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') - -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -245,7 +272,7 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -253,9 +280,9 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -277,31 +304,31 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -309,53 +336,57 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSSA].[dbo].[VariableResults] + -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -377,16 +408,36 @@ SET @table = NULL -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMSSA].[dbo].[VariableResults] +[TestDataMSSA].[dbo].[PersonSearch] + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' + +sp_describe_first_result_set + +-- SqlServer.SA.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set RollbackTransaction diff --git a/SqlServer.SA.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.SA.MS).sql b/SqlServer.SA.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.SA.MS).sql index cbac6c66342f..816b4de36fac 100644 --- a/SqlServer.SA.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.SA.MS).sql +++ b/SqlServer.SA.MS/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.SA.MS).sql @@ -1,182 +1,225 @@ -- SqlServer.SA.MS SqlServer.2019 -select @@version - --- SqlServer.SA.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') - -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSSA].[dbo].[VariableResults] + -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSSA].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSSA].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMSSA].[dbo].[PersonSearch] -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.SA.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.SA.MS).sql b/SqlServer.SA.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.SA.MS).sql index cbac6c66342f..816b4de36fac 100644 --- a/SqlServer.SA.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.SA.MS).sql +++ b/SqlServer.SA.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.SA.MS).sql @@ -1,182 +1,225 @@ -- SqlServer.SA.MS SqlServer.2019 -select @@version - --- SqlServer.SA.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') - -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSSA].[dbo].[VariableResults] + -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSSA].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSSA].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMSSA].[dbo].[PersonSearch] -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.SA.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.SA.MS).sql b/SqlServer.SA.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.SA.MS).sql index cbac6c66342f..816b4de36fac 100644 --- a/SqlServer.SA.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.SA.MS).sql +++ b/SqlServer.SA.MS/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.SA.MS).sql @@ -1,182 +1,225 @@ -- SqlServer.SA.MS SqlServer.2019 -select @@version - --- SqlServer.SA.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA.MS SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') - -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSSA].[dbo].[VariableResults] + -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSSA].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataMSSA].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataMSSA].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataMSSA].[dbo].[PersonSearch] -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.SA.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.SA.MS).sql b/SqlServer.SA.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.SA.MS).sql index 905e85801f1c..024acf828a5d 100644 --- a/SqlServer.SA.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.SA.MS).sql +++ b/SqlServer.SA.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.SA.MS).sql @@ -7,9 +7,5 @@ FROM -- SqlServer.SA.MS SqlServer.2019 -select @@version - --- SqlServer.SA.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() diff --git a/SqlServer.SA.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.SA.MS).sql b/SqlServer.SA.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.SA.MS).sql index 6ea490a7d773..9217b4b57887 100644 --- a/SqlServer.SA.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.SA.MS).sql +++ b/SqlServer.SA.MS/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.SA.MS).sql @@ -14,71 +14,87 @@ FROM -- SqlServer.SA.MS SqlServer.2019 -select @@version - --- SqlServer.SA.MS SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -98,41 +114,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') - --- SqlServer.SA.MS SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA.MS SqlServer.2019 - -EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') - -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -140,7 +140,7 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -148,9 +148,9 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -172,31 +172,31 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -204,53 +204,57 @@ sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataMSSA].[dbo].[VariableResults] + -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataMSSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataMSSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataMSSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataMSSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -272,17 +276,37 @@ SET @table = NULL -- SqlServer.SA.MS SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataMSSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataMSSA].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.SA.MS SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataMSSA].[dbo].[VariableResults] +[TestDataMSSA].[dbo].[PersonSearch] + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[Issue1897] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' + +sp_describe_first_result_set + +-- SqlServer.SA.MS SqlServer.2019 + +EXEC('SELECT * FROM [TestDataMSSA].[dbo].[Issue1921]()') + +-- SqlServer.SA.MS SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataMSSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set RollbackTransaction -- SqlServer.SA.MS SqlServer.2019 diff --git a/SqlServer.SA/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.SA).sql b/SqlServer.SA/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.SA).sql index 3d045b0d2a19..e29b64058d45 100644 --- a/SqlServer.SA/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.SA).sql +++ b/SqlServer.SA/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.Issue1921Test(SqlServer.SA).sql @@ -1,70 +1,86 @@ -- SqlServer.SA SqlServer.2019 -select @@version - --- SqlServer.SA SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -84,41 +100,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') - -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -126,7 +126,7 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -134,9 +134,9 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -158,31 +158,31 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -190,53 +190,57 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataSA].[dbo].[VariableResults] + -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -258,28 +262,48 @@ SET @table = NULL -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataSA].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataSA].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.SA SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataSA].[dbo].[PersonSearch] -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 + +EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') + +-- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.SA/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.SA).sql b/SqlServer.SA/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.SA).sql index 54e74e757c1e..df0898b84036 100644 --- a/SqlServer.SA/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.SA).sql +++ b/SqlServer.SA/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestDescriptions(SqlServer.SA).sql @@ -1,182 +1,225 @@ -- SqlServer.SA SqlServer.2019 -select @@version - --- SqlServer.SA SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') - -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataSA].[dbo].[VariableResults] + -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataSA].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataSA].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.SA SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataSA].[dbo].[PersonSearch] -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 + +EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') + +-- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.SA/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.SA).sql b/SqlServer.SA/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.SA).sql index 54e74e757c1e..df0898b84036 100644 --- a/SqlServer.SA/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.SA).sql +++ b/SqlServer.SA/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestIssue1144(SqlServer.SA).sql @@ -1,182 +1,225 @@ -- SqlServer.SA SqlServer.2019 -select @@version - --- SqlServer.SA SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') - -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataSA].[dbo].[VariableResults] + -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataSA].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataSA].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.SA SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataSA].[dbo].[PersonSearch] -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 + +EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') + +-- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.SA/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.SA).sql b/SqlServer.SA/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.SA).sql index ece6497d91e7..f12dc6908354 100644 --- a/SqlServer.SA/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.SA).sql +++ b/SqlServer.SA/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchema(SqlServer.SA).sql @@ -67,183 +67,226 @@ CREATE TABLE TemporalTable4 -- SqlServer.SA SqlServer.2019 -select @@version - --- SqlServer.SA SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -263,41 +306,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') - -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -305,7 +332,7 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -313,9 +340,9 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -337,31 +364,31 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -369,53 +396,57 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataSA].[dbo].[VariableResults] + -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -437,30 +468,50 @@ SET @table = NULL -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataSA].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataSA].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.SA SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataSA].[dbo].[PersonSearch] -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 + +EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') + +-- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction -- SqlServer.SA SqlServer.2019 diff --git a/SqlServer.SA/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.SA).sql b/SqlServer.SA/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.SA).sql index 2f673684b2b1..cc1754b97d00 100644 --- a/SqlServer.SA/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.SA).sql +++ b/SqlServer.SA/Tests/DataProvider/SqlServerTests/Tests.DataProvider.SqlServerTests.TestTemporalTableSchemaHideSystemTables(SqlServer.SA).sql @@ -67,184 +67,229 @@ CREATE TABLE TemporalTable4 -- SqlServer.SA SqlServer.2019 -select @@version - --- SqlServer.SA SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - (t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [o].[object_id] = [a_Table].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL - ) AND t.temporal_type <> 1 + [o].[is_ms_shipped] = 0 AND + [o].[type] IN (N'U', N'V') AND + ([a_Table].[object_id] IS NULL OR [a_Table].[temporal_type] <> 1 OR [a_Table].[temporal_type] IS NULL) AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -264,41 +309,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') - -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -306,7 +335,7 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -314,9 +343,9 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -338,31 +367,31 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -370,53 +399,57 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataSA].[dbo].[VariableResults] + -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -438,30 +471,50 @@ SET @table = NULL -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataSA].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataSA].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.SA SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataSA].[dbo].[PersonSearch] -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 + +EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') + +-- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction -- SqlServer.SA SqlServer.2019 diff --git a/SqlServer.SA/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.SA).sql b/SqlServer.SA/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.SA).sql index 54e74e757c1e..df0898b84036 100644 --- a/SqlServer.SA/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.SA).sql +++ b/SqlServer.SA/Tests/Linq/IssueTests/Tests.Linq.IssueTests.Issue60Test(SqlServer.SA).sql @@ -1,182 +1,225 @@ -- SqlServer.SA SqlServer.2019 -select @@version - --- SqlServer.SA SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') - -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataSA].[dbo].[VariableResults] + -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataSA].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataSA].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.SA SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataSA].[dbo].[PersonSearch] -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 + +EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') + +-- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.SA/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.SA).sql b/SqlServer.SA/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.SA).sql index 50cd1da4b8cf..79d19daed60e 100644 --- a/SqlServer.SA/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.SA).sql +++ b/SqlServer.SA/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeCatalogTest(SqlServer.SA).sql @@ -1,182 +1,225 @@ -- SqlServer.SA SqlServer.2019 -select @@version - --- SqlServer.SA SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') - -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataSA].[dbo].[VariableResults] + -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,362 +401,484 @@ SET @table = NULL -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataSA].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataSA].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.SA SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataSA].[dbo].[PersonSearch] -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -RollbackTransaction -- SqlServer.SA SqlServer.2019 -select @@version +EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') -- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' -SELECT compatibility_level FROM sys.databases WHERE name = db_name() +sp_describe_first_result_set +RollbackTransaction -- SqlServer.SA SqlServer.2019 +SELECT compatibility_level FROM sys.databases WHERE name = db_name() + +-- SqlServer.SA SqlServer.2019 SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.SA SqlServer.2019 -select @@version - --- SqlServer.SA SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.SA/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.SA).sql b/SqlServer.SA/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.SA).sql index 50cd1da4b8cf..79d19daed60e 100644 --- a/SqlServer.SA/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.SA).sql +++ b/SqlServer.SA/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.IncludeExcludeSchemaTest(SqlServer.SA).sql @@ -1,182 +1,225 @@ -- SqlServer.SA SqlServer.2019 -select @@version - --- SqlServer.SA SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') - -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataSA].[dbo].[VariableResults] + -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,362 +401,484 @@ SET @table = NULL -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataSA].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataSA].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.SA SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataSA].[dbo].[PersonSearch] -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set -RollbackTransaction -- SqlServer.SA SqlServer.2019 -select @@version +EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') -- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' -SELECT compatibility_level FROM sys.databases WHERE name = db_name() +sp_describe_first_result_set +RollbackTransaction -- SqlServer.SA SqlServer.2019 +SELECT compatibility_level FROM sys.databases WHERE name = db_name() + +-- SqlServer.SA SqlServer.2019 SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction -- SqlServer.SA SqlServer.2019 -select @@version - --- SqlServer.SA SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' RollbackTransaction diff --git a/SqlServer.SA/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.SA).sql b/SqlServer.SA/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.SA).sql index 6312960189fe..eb7a9e047eac 100644 --- a/SqlServer.SA/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.SA).sql +++ b/SqlServer.SA/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.PrimaryForeignKeyTest(SqlServer.SA).sql @@ -7,183 +7,226 @@ FROM -- SqlServer.SA SqlServer.2019 -select @@version - --- SqlServer.SA SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -203,41 +246,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') - -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -245,7 +272,7 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -253,9 +280,9 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -277,31 +304,31 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -309,53 +336,57 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataSA].[dbo].[VariableResults] + -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -377,16 +408,36 @@ SET @table = NULL -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataSA].[dbo].[VariableResults] +[TestDataSA].[dbo].[PersonSearch] + +-- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' + +sp_describe_first_result_set + +-- SqlServer.SA SqlServer.2019 + +EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') + +-- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set RollbackTransaction diff --git a/SqlServer.SA/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.SA).sql b/SqlServer.SA/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.SA).sql index 98014dd00aee..95e5a78c0cd8 100644 --- a/SqlServer.SA/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.SA).sql +++ b/SqlServer.SA/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.SchemaOnlyTestIssue2348(SqlServer.SA).sql @@ -1,64 +1,92 @@ -- SqlServer.SA SqlServer.2019 -select @@version - --- SqlServer.SA SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA SqlServer.2019 - -[TestDataSA].[dbo].[AddIssue792Record] + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 +DECLARE @output3 Int -- Int32 +SET @output3 = 0 -[TestDataSA].[dbo].[DuplicateColumnNames] +[TestDataSA].[dbo].[QueryProcMultipleParameters] -- SqlServer.SA SqlServer.2019 DECLARE @input Int -- Int32 @@ -77,46 +105,20 @@ SET @output = 0 [TestDataSA].[dbo].[ExecuteProcStringParameters] -- SqlServer.SA SqlServer.2019 +DECLARE @id Int -- Int32 +SET @id = 0 -EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') - --- SqlServer.SA SqlServer.2019 - -[TestDataSA].[dbo].[Issue1897] - --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') - --- SqlServer.SA SqlServer.2019 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' - -[TestDataSA].[dbo].[OutRefEnumTest] +[TestDataSA].[dbo].[Person_SelectByKey] -- SqlServer.SA SqlServer.2019 -DECLARE @ID Int -- Int32 -SET @ID = 0 -DECLARE @outputID Int -- Int32 -SET @outputID = 0 -DECLARE @inputOutputID Int -- Int32 -SET @inputOutputID = 0 -DECLARE @str VarChar(50) -- AnsiString -SET @str = N'' -DECLARE @outputStr VarChar(50) -- AnsiString -SET @outputStr = N'' -DECLARE @inputOutputStr VarChar(50) -- AnsiString -SET @inputOutputStr = N'' +DECLARE @id Int -- Int32 +SET @id = 0 -[TestDataSA].[dbo].[OutRefTest] +[TestDataSA].[dbo].[Person_SelectByKeyLowercase] -- SqlServer.SA SqlServer.2019 -[TestDataSA].[dbo].[Patient_SelectAll] +[TestDataSA].[dbo].[Person_SelectAll] -- SqlServer.SA SqlServer.2019 DECLARE @firstName NVarChar(50) -- String @@ -124,13 +126,15 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataSA].[dbo].[Patient_SelectByName] +[TestDataSA].[dbo].[Person_SelectByName] -- SqlServer.SA SqlServer.2019 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 +DECLARE @firstName NVarChar(50) -- String +SET @firstName = N'' +DECLARE @lastName NVarChar(50) -- String +SET @lastName = N'' -[TestDataSA].[dbo].[Person_Delete] +[TestDataSA].[dbo].[Person_SelectListByName] -- SqlServer.SA SqlServer.2019 DECLARE @FirstName NVarChar(50) -- String @@ -159,20 +163,28 @@ SET @PersonID = 0 [TestDataSA].[dbo].[Person_Insert_OutputParameter] -- SqlServer.SA SqlServer.2019 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 +DECLARE @FirstName NVarChar(50) -- String +SET @FirstName = N'' +DECLARE @LastName NVarChar(50) -- String +SET @LastName = N'' +DECLARE @MiddleName NVarChar(50) -- String +SET @MiddleName = N'' +DECLARE @Gender Char(1) -- AnsiStringFixedLength +SET @Gender = char(0) -[TestDataSA].[dbo].[Person_SelectAll] +[TestDataSA].[dbo].[Person_Update] -- SqlServer.SA SqlServer.2019 -DECLARE @id Int -- Int32 -SET @id = 0 +DECLARE @PersonID Int -- Int32 +SET @PersonID = 0 -[TestDataSA].[dbo].[Person_SelectByKey] +[TestDataSA].[dbo].[Person_Delete] -- SqlServer.SA SqlServer.2019 -DECLARE @id Int -- Int32 -SET @id = 0 -[TestDataSA].[dbo].[Person_SelectByKeyLowercase] +[TestDataSA].[dbo].[Patient_SelectAll] -- SqlServer.SA SqlServer.2019 DECLARE @firstName NVarChar(50) -- String @@ -180,61 +192,55 @@ SET @firstName = N'' DECLARE @lastName NVarChar(50) -- String SET @lastName = N'' -[TestDataSA].[dbo].[Person_SelectByName] +[TestDataSA].[dbo].[Patient_SelectByName] -- SqlServer.SA SqlServer.2019 -DECLARE @firstName NVarChar(50) -- String -SET @firstName = N'' -DECLARE @lastName NVarChar(50) -- String -SET @lastName = N'' +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 -[TestDataSA].[dbo].[Person_SelectListByName] +[TestDataSA].[dbo].[VariableResults] -- SqlServer.SA SqlServer.2019 -DECLARE @PersonID Int -- Int32 -SET @PersonID = 0 -DECLARE @FirstName NVarChar(50) -- String -SET @FirstName = N'' -DECLARE @LastName NVarChar(50) -- String -SET @LastName = N'' -DECLARE @MiddleName NVarChar(50) -- String -SET @MiddleName = N'' -DECLARE @Gender Char(1) -- AnsiStringFixedLength -SET @Gender = char(0) +DECLARE @ID Int -- Int32 +SET @ID = 0 +DECLARE @outputID Int -- Int32 +SET @outputID = 0 +DECLARE @inputOutputID Int -- Int32 +SET @inputOutputID = 0 +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataSA].[dbo].[Person_Update] +[TestDataSA].[dbo].[OutRefTest] -- SqlServer.SA SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' +DECLARE @str VarChar(50) -- AnsiString +SET @str = N'' +DECLARE @outputStr VarChar(50) -- AnsiString +SET @outputStr = N'' +DECLARE @inputOutputStr VarChar(50) -- AnsiString +SET @inputOutputStr = N'' -[TestDataSA].[dbo].[PersonSearch] +[TestDataSA].[dbo].[OutRefEnumTest] -- SqlServer.SA SqlServer.2019 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -DECLARE @output3 Int -- Int32 -SET @output3 = 0 -[TestDataSA].[dbo].[QueryProcMultipleParameters] +EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA SqlServer.2019 -DECLARE @input Int -- Int32 -SET @input = 0 -DECLARE @output1 Int -- Int32 -SET @output1 = 0 -DECLARE @output2 Int -- Int32 -SET @output2 = 0 -[TestDataSA].[dbo].[QueryProcParameters] +[TestDataSA].[dbo].[SelectImplicitColumn] -- SqlServer.SA SqlServer.2019 -[TestDataSA].[dbo].[SelectImplicitColumn] +[TestDataSA].[dbo].[DuplicateColumnNames] + +-- SqlServer.SA SqlServer.2019 + +[TestDataSA].[dbo].[AddIssue792Record] -- SqlServer.SA SqlServer.2019 DECLARE @table [dbo].[TestTableType] -- Structured -- Object @@ -243,87 +249,121 @@ SET @table = NULL [TestDataSA].[dbo].[TableTypeTestProc] -- SqlServer.SA SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataSA].[dbo].[VariableResults] +[TestDataSA].[TestSchema].[TestProcedure] -- SqlServer.SA SqlServer.2019 EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataSA].[TestSchema].[TestProcedure] +[TestDataSA].[dbo].[PersonSearch] -RollbackTransaction -- SqlServer.SA SqlServer.2019 -select @@version +[TestDataSA].[dbo].[Issue1897] -- SqlServer.SA SqlServer.2019 -SELECT compatibility_level FROM sys.databases WHERE name = db_name() +EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') -- SqlServer.SA SqlServer.2019 +DECLARE @input Int -- Int32 +SET @input = 0 +DECLARE @output1 Int -- Int32 +SET @output1 = 0 +DECLARE @output2 Int -- Int32 +SET @output2 = 0 -SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description -FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME +[TestDataSA].[dbo].[QueryProcParameters] + +RollbackTransaction +-- SqlServer.SA SqlServer.2019 + +SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' -sp_describe_first_result_set +SELECT + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -343,41 +383,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') - -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -385,7 +409,7 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -393,9 +417,9 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -417,31 +441,31 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -449,53 +473,57 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataSA].[dbo].[VariableResults] + -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -517,28 +545,48 @@ SET @table = NULL -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataSA].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataSA].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.SA SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataSA].[dbo].[PersonSearch] -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 + +EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') + +-- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.SA/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.SA).sql b/SqlServer.SA/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.SA).sql index 6312960189fe..eb7a9e047eac 100644 --- a/SqlServer.SA/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.SA).sql +++ b/SqlServer.SA/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.Test(SqlServer.SA).sql @@ -7,183 +7,226 @@ FROM -- SqlServer.SA SqlServer.2019 -select @@version - --- SqlServer.SA SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -203,41 +246,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') - -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -245,7 +272,7 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -253,9 +280,9 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -277,31 +304,31 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -309,53 +336,57 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataSA].[dbo].[VariableResults] + -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -377,16 +408,36 @@ SET @table = NULL -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataSA].[dbo].[VariableResults] +[TestDataSA].[dbo].[PersonSearch] + +-- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' + +sp_describe_first_result_set + +-- SqlServer.SA SqlServer.2019 + +EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') + +-- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set RollbackTransaction diff --git a/SqlServer.SA/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.SA).sql b/SqlServer.SA/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.SA).sql index 54e74e757c1e..df0898b84036 100644 --- a/SqlServer.SA/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.SA).sql +++ b/SqlServer.SA/Tests/SchemaProvider/SchemaProviderTests/Tests.SchemaProvider.SchemaProviderTests.TestApiImplemented(SqlServer.SA).sql @@ -1,182 +1,225 @@ -- SqlServer.SA SqlServer.2019 -select @@version - --- SqlServer.SA SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') - -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataSA].[dbo].[VariableResults] + -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataSA].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataSA].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.SA SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataSA].[dbo].[PersonSearch] -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 + +EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') + +-- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.SA/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.SA).sql b/SqlServer.SA/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.SA).sql index 54e74e757c1e..df0898b84036 100644 --- a/SqlServer.SA/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.SA).sql +++ b/SqlServer.SA/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestAttributeMapping(SqlServer.SA).sql @@ -1,182 +1,225 @@ -- SqlServer.SA SqlServer.2019 -select @@version - --- SqlServer.SA SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') - -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataSA].[dbo].[VariableResults] + -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataSA].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataSA].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.SA SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataSA].[dbo].[PersonSearch] -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 + +EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') + +-- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.SA/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.SA).sql b/SqlServer.SA/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.SA).sql index 54e74e757c1e..df0898b84036 100644 --- a/SqlServer.SA/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.SA).sql +++ b/SqlServer.SA/Tests/UserTests/Issue1305Tests/Tests.UserTests.Issue1305Tests.TestFluentMapping(SqlServer.SA).sql @@ -1,182 +1,225 @@ -- SqlServer.SA SqlServer.2019 -select @@version - --- SqlServer.SA SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - TABLE_CATALOG as CatalogName, - TABLE_SCHEMA as SchemaName, - TABLE_NAME as TableName, - CASE WHEN TABLE_TYPE = 'VIEW' THEN 1 ELSE 0 END as IsView, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description, - CASE WHEN TABLE_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + IIF([t1].[Type_1] = N'V', 1, 0), + ISNULL(CAST([ep_1].[value] AS NVarChar(Max)), N''), + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.TABLES s - LEFT JOIN - sys.tables t - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id - LEFT JOIN - sys.extended_properties x - ON - OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - x.minor_id = 0 AND - x.name = 'MS_Description' -WHERE - t.object_id IS NULL OR - t.is_ms_shipped <> 1 AND ( SELECT - major_id + DB_NAME() as [databaseName], + [a_Schema_1].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [Type_1], + [o].[object_id] FROM - sys.extended_properties + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [o].[schema_id] = [a_Schema_1].[schema_id] WHERE - major_id = t.object_id AND - minor_id = 0 AND - class = 1 AND - name = N'microsoft_database_tools_support' - ) IS NULL + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'U', N'V') AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [o].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep_1] ON [ep_1].[major_id] = [t1].[object_id] AND [ep_1].[minor_id] = 0 AND [ep_1].[class] = 1 AND [ep_1].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - k.TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + k.TABLE_SCHEMA + '.' + k.TABLE_NAME as TableID, - k.CONSTRAINT_NAME as PrimaryKeyName, - k.COLUMN_NAME as ColumnName, - k.ORDINAL_POSITION as Ordinal + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_ParentTable].[name], + [kc].[name], + [a_Column].[name], + [ic].[key_ordinal] FROM - INFORMATION_SCHEMA.KEY_COLUMN_USAGE k - JOIN - INFORMATION_SCHEMA.TABLE_CONSTRAINTS c - ON - k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND - k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND - k.CONSTRAINT_NAME = c.CONSTRAINT_NAME + [sys].[key_constraints] [kc] + INNER JOIN [sys].[schemas] [a_Schema] ON [kc].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[tables] [a_ParentTable] ON [kc].[parent_object_id] = [a_ParentTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [kc].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[index_columns] [ic] ON [kc].[parent_object_id] = [ic].[object_id] AND [kc].[unique_index_id] = [ic].[index_id] + INNER JOIN [sys].[columns] [a_Column] ON [ic].[object_id] = [a_Column].[object_id] AND [ic].[column_id] = [a_Column].[column_id] WHERE - c.CONSTRAINT_TYPE='PRIMARY KEY' + [kc].[is_ms_shipped] = 0 AND [kc].[type] = N'PK' AND + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep] + WHERE + [ep].[major_id] = [a_ParentTable].[object_id] AND + [ep].[minor_id] = 0 AND + [ep].[class] = 1 AND + [ep].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 - SELECT - TABLE_CATALOG COLLATE DATABASE_DEFAULT + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TableID, - COLUMN_NAME as Name, - CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as IsNullable, - ORDINAL_POSITION as Ordinal, - c.DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - ISNULL(NUMERIC_PRECISION, DATETIME_PRECISION) as [Precision], - NUMERIC_SCALE as Scale, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as [Description], - COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') as IsIdentity, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnInsert, - CASE WHEN c.DATA_TYPE = 'timestamp' - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') = 1 - OR COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'GeneratedAlwaysType') <> 0 - OR t.temporal_type = 1 - - THEN 1 ELSE 0 END as SkipOnUpdate + DB_NAME() COLLATE DATABASE_DEFAULT + N'.' + [a_Schema_1].[name] + N'.' + [a_Object_1].[name], + [c_1].[name], + [c_1].[is_nullable], + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'Ordinal'), + ISNULL(TYPE_NAME(IIF([c_1].[user_type_id] = 255, [c_1].[user_type_id], [c_1].[system_type_id])), [a_Type].[name]), + COLUMNPROPERTY([c_1].[object_id], [c_1].[name], 'CharMaxLen'), + CASE + WHEN [c_1].[system_type_id] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [c_1].[precision] + WHEN [c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([c_1].[system_type_id], [c_1].[scale]) + ELSE NULL + END, + IIF([c_1].[system_type_id] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([c_1].[system_type_id], [c_1].[scale])), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [c_1].[is_identity], + IIF([c_1].[is_computed] = 1 OR [c_1].[generated_always_type] <> 0 OR [a_Table].[object_id] IS NOT NULL AND [a_Table].[temporal_type] = 1, 1, 0) FROM - INFORMATION_SCHEMA.COLUMNS c - LEFT JOIN - sys.extended_properties x - ON - --OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = x.major_id AND - COLUMNPROPERTY(OBJECT_ID('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'ColumnID') = x.minor_id AND - x.name = 'MS_Description' AND x.class = 1 - LEFT JOIN sys.tables t ON OBJECT_ID('[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']') = t.object_id + [sys].[columns] [c_1] + INNER JOIN [sys].[objects] [a_Object] ON [c_1].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[objects] [a_Object_1] ON [c_1].[object_id] = [a_Object_1].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object_1].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_Object_1].[schema_id] = [a_Schema_1].[schema_id] + LEFT JOIN [sys].[tables] [a_Table] ON [c_1].[object_id] = [a_Table].[object_id] + LEFT JOIN [sys].[types] [a_Type] ON [c_1].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [c_1].[object_id] AND [ep].[minor_id] = [c_1].[column_id] AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' +WHERE + NOT EXISTS( + SELECT + * + FROM + [sys].[extended_properties] [ep_1] + WHERE + [ep_1].[major_id] = [c_1].[object_id] AND + [ep_1].[minor_id] = 0 AND + [ep_1].[class] = 1 AND + [ep_1].[name] = N'microsoft_database_tools_support' + ) -- SqlServer.SA SqlServer.2019 SELECT - fk.name as Name, - DB_NAME() + '.' + SCHEMA_NAME(po.schema_id) + '.' + po.name as ThisTableID, - pc.name as ThisColumn, - DB_NAME() + '.' + SCHEMA_NAME(fo.schema_id) + '.' + fo.name as OtherTableID, - fc.name as OtherColumn, - fkc.constraint_column_id as Ordinal -FROM sys.foreign_keys fk - inner join sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id - inner join sys.columns pc ON fkc.parent_column_id = pc.column_id and fkc.parent_object_id = pc.object_id - inner join sys.objects po ON fk.parent_object_id = po.object_id - inner join sys.columns fc ON fkc.referenced_column_id = fc.column_id and fkc.referenced_object_id = fc.object_id - inner join sys.objects fo ON fk.referenced_object_id = fo.object_id -ORDER BY - ThisTableID, - Ordinal + [t1].[Name_4], + [t1].[Ordinal], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ThisColumn], + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name_2] + N'.' + [t1].[Name_3], + [t1].[OtherColumn] +FROM + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_ThisTable].[name] as [Name_1], + [a_Schema_1].[name] as [Name_2], + [a_OtherTable].[name] as [Name_3], + [a_ForeignKey].[name] as [Name_4], + [fkc].[constraint_column_id] as [Ordinal], + [a_ThisColumn].[name] as [ThisColumn], + [a_OtherColumn].[name] as [OtherColumn] + FROM + [sys].[foreign_key_columns] [fkc] + INNER JOIN [sys].[foreign_keys] [a_ForeignKey] ON [fkc].[constraint_object_id] = [a_ForeignKey].[object_id] + INNER JOIN [sys].[tables] [a_ThisTable] ON [fkc].[parent_object_id] = [a_ThisTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_ThisTable].[schema_id] = [a_Schema].[schema_id] + INNER JOIN [sys].[columns] [a_ThisColumn] ON [fkc].[parent_object_id] = [a_ThisColumn].[object_id] AND [fkc].[parent_column_id] = [a_ThisColumn].[column_id] + INNER JOIN [sys].[tables] [a_OtherTable] ON [fkc].[referenced_object_id] = [a_OtherTable].[object_id] + INNER JOIN [sys].[schemas] [a_Schema_1] ON [a_OtherTable].[schema_id] = [a_Schema_1].[schema_id] + INNER JOIN [sys].[columns] [a_OtherColumn] ON [fkc].[referenced_object_id] = [a_OtherColumn].[object_id] AND [fkc].[referenced_column_id] = [a_OtherColumn].[column_id] + ) [t1] -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -196,41 +239,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') - -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -238,7 +265,7 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -246,9 +273,9 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -270,31 +297,31 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -302,53 +329,57 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataSA].[dbo].[VariableResults] + -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -370,28 +401,48 @@ SET @table = NULL -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataSA].[TestSchema].[TestProcedure] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 -[TestDataSA].[dbo].[VariableResults] +EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') -- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@nameFilter nvarchar(512)' -EXEC('SELECT * FROM [TestDataSA].[TestSchema].[SchemaTableFunction](NULL)') +sp_describe_first_result_set + +-- SqlServer.SA SqlServer.2019 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' + +[TestDataSA].[dbo].[PersonSearch] -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[TestSchema].[TestProcedure] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 + +EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') + +-- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set + RollbackTransaction diff --git a/SqlServer.SA/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.SA).sql b/SqlServer.SA/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.SA).sql index 33b99081d558..f347d0f0872e 100644 --- a/SqlServer.SA/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.SA).sql +++ b/SqlServer.SA/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithTransactionThrowsFromProvider(SqlServer.SA).sql @@ -7,9 +7,5 @@ FROM -- SqlServer.SA SqlServer.2019 -select @@version - --- SqlServer.SA SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() diff --git a/SqlServer.SA/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.SA).sql b/SqlServer.SA/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.SA).sql index 859aa6df66c1..9e94f3df4e8e 100644 --- a/SqlServer.SA/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.SA).sql +++ b/SqlServer.SA/Tests/UserTests/Issue792Tests/Tests.UserTests.Issue792Tests.TestWithoutTransaction(SqlServer.SA).sql @@ -14,71 +14,87 @@ FROM -- SqlServer.SA SqlServer.2019 -select @@version - --- SqlServer.SA SqlServer.2019 - SELECT compatibility_level FROM sys.databases WHERE name = db_name() -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - SPECIFIC_CATALOG as CatalogName, - SPECIFIC_SCHEMA as SchemaName, - SPECIFIC_NAME as ProcedureName, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' THEN 1 ELSE 0 END as IsFunction, - CASE WHEN ROUTINE_TYPE = 'FUNCTION' AND DATA_TYPE = 'TABLE' THEN 1 ELSE 0 END as IsTableFunction, - CASE WHEN EXISTS(SELECT * FROM sys.objects where name = SPECIFIC_NAME AND type='AF') - THEN 1 ELSE 0 END as IsAggregateFunction, - CASE WHEN SPECIFIC_SCHEMA = 'dbo' THEN 1 ELSE 0 END as IsDefaultSchema, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[databaseName], + [t1].[Name], + [t1].[Name_1], + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N''), + [t1].[IsFunction], + IIF([t1].[Name] = N'dbo', 1, 0) FROM - INFORMATION_SCHEMA.ROUTINES - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - x.name = 'MS_Description' AND x.class = 1 -ORDER BY SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [o].[name] as [Name_1], + [o].[type] as [IsFunction], + [o].[object_id] + FROM + [sys].[objects] [o] + INNER JOIN [sys].[schemas] [a_Schema] ON [o].[schema_id] = [a_Schema].[schema_id] + WHERE + [o].[is_ms_shipped] = 0 AND [o].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[object_id] AND [ep].[minor_id] = 0 AND [ep].[class] = 1 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 SELECT - SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT + '.' + SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME as ProcedureID, - ORDINAL_POSITION as Ordinal, - PARAMETER_MODE as Mode, - PARAMETER_NAME as ParameterName, - DATA_TYPE as DataType, - CHARACTER_MAXIMUM_LENGTH as Length, - NUMERIC_PRECISION as [Precision], - NUMERIC_SCALE as Scale, - CASE WHEN PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsIn, - CASE WHEN PARAMETER_MODE = 'OUT' OR PARAMETER_MODE = 'INOUT' THEN 1 ELSE 0 END as IsOut, - CASE WHEN IS_RESULT = 'YES' THEN 1 ELSE 0 END as IsResult, - USER_DEFINED_TYPE_CATALOG as UDTCatalog, - USER_DEFINED_TYPE_SCHEMA as UDTSchema, - USER_DEFINED_TYPE_NAME as UDTName, - 1 as IsNullable, - ISNULL(CONVERT(NVARCHAR(MAX), x.value), N'') as Description + [t1].[databaseName] COLLATE DATABASE_DEFAULT + N'.' + [t1].[Name] + N'.' + [t1].[Name_1], + [t1].[ParameterId], + [t1].[Name_3], + ISNULL(TYPE_NAME(IIF([t1].[UserTypeId] = 255, [t1].[UserTypeId], [t1].[SystemTypeId])), [t1].[Name_2]), + COLUMNPROPERTY([t1].[ObjectId], [t1].[Name_3], 'CharMaxLen'), + CASE + WHEN [t1].[SystemTypeId] IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) + THEN [t1].[Precision_1] + WHEN [t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1]) + ELSE NULL + END, + IIF([t1].[SystemTypeId] IN (40, 41, 42, 43, 58, 61), NULL, ODBCSCALE([t1].[SystemTypeId], [t1].[Scale_1])), + IIF([t1].[ParameterId] = 0 OR [t1].[is_output] = 1, 1, 0), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[databaseName], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_4], NULL), + IIF([t1].[SchemaId] <> 4 OR [t1].[SchemaId] IS NULL, [t1].[Name_2], NULL), + ISNULL(CAST([ep].[value] AS NVarChar(Max)), N'') FROM - INFORMATION_SCHEMA.PARAMETERS - LEFT JOIN sys.extended_properties x - ON OBJECT_ID('[' + SPECIFIC_SCHEMA + '].[' + SPECIFIC_NAME + ']') = x.major_id AND - ORDINAL_POSITION = x.minor_id AND - x.name = 'MS_Description' AND x.class = 2 - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set + ( + SELECT + DB_NAME() as [databaseName], + [a_Schema].[name] as [Name], + [a_Object].[name] as [Name_1], + [p].[user_type_id] as [UserTypeId], + [p].[system_type_id] as [SystemTypeId], + [a_Type].[name] as [Name_2], + [p].[object_id] as [ObjectId], + [p].[name] as [Name_3], + [p].[precision] as [Precision_1], + [p].[scale] as [Scale_1], + [p].[parameter_id] as [ParameterId], + [a_Type].[schema_id] as [SchemaId], + [a_Schema_1].[name] as [Name_4], + [p].[is_output] + FROM + [sys].[parameters] [p] + INNER JOIN [sys].[objects] [a_Object] ON [p].[object_id] = [a_Object].[object_id] + INNER JOIN [sys].[schemas] [a_Schema] ON [a_Object].[schema_id] = [a_Schema].[schema_id] + LEFT JOIN [sys].[types] [a_Type] ON [p].[user_type_id] = [a_Type].[user_type_id] + LEFT JOIN [sys].[schemas] [a_Schema_1] ON [a_Type].[schema_id] = [a_Schema_1].[schema_id] + WHERE + [a_Object].[is_ms_shipped] = 0 AND [a_Object].[type] IN (N'P', N'FN', N'TF', N'IF', N'AF', N'FT', N'IS', N'PC', N'FS') + ) [t1] + LEFT JOIN [sys].[extended_properties] [ep] ON [ep].[major_id] = [t1].[ObjectId] AND [ep].[minor_id] = [t1].[ParameterId] AND [ep].[class] = 2 AND [ep].[name] = N'MS_Description' -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@input int, @output1 int, @output2 int, @output3 int' sp_describe_first_result_set @@ -98,41 +114,25 @@ SET @params = N'@input int, @output int' sp_describe_first_result_set --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') - --- SqlServer.SA SqlServer.2019 -DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' -DECLARE @params NVarChar(4000) -- String -SET @params = N'' - -sp_describe_first_result_set - --- SqlServer.SA SqlServer.2019 - -EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') - -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' +SET @params = N'@id int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -140,7 +140,7 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -148,9 +148,9 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int' +SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' sp_describe_first_result_set @@ -172,31 +172,31 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectAll] ' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' DECLARE @params NVarChar(4000) -- String -SET @params = N'' +SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKey] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Person_Delete] @PersonID' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'@PersonID int' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByKeyLowercase] @id' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectAll] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@id int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[Patient_SelectByName] @firstName, @lastName' DECLARE @params NVarChar(4000) -- String SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' @@ -204,53 +204,57 @@ sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_SelectListByName] @firstName, @lastName' +SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' DECLARE @params NVarChar(4000) -- String -SET @params = N'@firstName nvarchar(50), @lastName nvarchar(50)' +SET @params = N'@ReturnFullRow bit' sp_describe_first_result_set +-- SqlServer.SA SqlServer.2019 +DECLARE @ReturnFullRow Bit -- Boolean +SET @ReturnFullRow = 0 + +[TestDataSA].[dbo].[VariableResults] + -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[Person_Update] @PersonID, @FirstName, @LastName, @MiddleName, @Gender' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefTest] @ID, @outputID, @inputOutputID, @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@PersonID int, @FirstName nvarchar(50), @LastName nvarchar(50), @MiddleName nvarchar(50), @Gender char(1)' +SET @params = N'@ID int, @outputID int, @inputOutputID int, @str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' +SET @tsql = N'exec [TestDataSA].[dbo].[OutRefEnumTest] @str, @outputStr, @inputOutputStr' DECLARE @params NVarChar(4000) -- String -SET @params = N'@nameFilter nvarchar(512)' +SET @params = N'@str varchar(50), @outputStr varchar(50), @inputOutputStr varchar(50)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @nameFilter NVarChar(512) -- String -SET @nameFilter = N'' -[TestDataSA].[dbo].[PersonSearch] +EXEC('SELECT * FROM [TestDataSA].[dbo].[GetParentByID](NULL)') -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcMultipleParameters] @input, @output1, @output2, @output3' +SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int, @output3 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +SET @tsql = N'exec [TestDataSA].[dbo].[DuplicateColumnNames] ' DECLARE @params NVarChar(4000) -- String -SET @params = N'@input int, @output1 int, @output2 int' +SET @params = N'' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[SelectImplicitColumn] ' +SET @tsql = N'exec [TestDataSA].[dbo].[AddIssue792Record] ' DECLARE @params NVarChar(4000) -- String SET @params = N'' @@ -272,17 +276,37 @@ SET @table = NULL -- SqlServer.SA SqlServer.2019 DECLARE @tsql NVarChar(4000) -- String -SET @tsql = N'exec [TestDataSA].[dbo].[VariableResults] @ReturnFullRow' +SET @tsql = N'exec [TestDataSA].[dbo].[PersonSearch] @nameFilter' DECLARE @params NVarChar(4000) -- String -SET @params = N'@ReturnFullRow bit' +SET @params = N'@nameFilter nvarchar(512)' sp_describe_first_result_set -- SqlServer.SA SqlServer.2019 -DECLARE @ReturnFullRow Bit -- Boolean -SET @ReturnFullRow = 0 +DECLARE @nameFilter NVarChar(512) -- String +SET @nameFilter = N'' -[TestDataSA].[dbo].[VariableResults] +[TestDataSA].[dbo].[PersonSearch] + +-- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[Issue1897] ' +DECLARE @params NVarChar(4000) -- String +SET @params = N'' + +sp_describe_first_result_set + +-- SqlServer.SA SqlServer.2019 + +EXEC('SELECT * FROM [TestDataSA].[dbo].[Issue1921]()') + +-- SqlServer.SA SqlServer.2019 +DECLARE @tsql NVarChar(4000) -- String +SET @tsql = N'exec [TestDataSA].[dbo].[QueryProcParameters] @input, @output1, @output2' +DECLARE @params NVarChar(4000) -- String +SET @params = N'@input int, @output1 int, @output2 int' + +sp_describe_first_result_set RollbackTransaction -- SqlServer.SA SqlServer.2019