Skip to content

Commit 6b4cfc1

Browse files
authored
Merge pull request #17731 from john-par/1783001-fix-validation-suggestion-10-28
Message fixes: Bulk update fixed alt-text bad value validation issues 10-28
2 parents a424565 + 441cb7e commit 6b4cfc1

20 files changed

Lines changed: 102 additions & 102 deletions

docs/azure-data-studio/tutorial-qds-sql-server.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ To add the *slow queries widget* to your dashboard, edit the *dashboard.database
131131

132132
5. View the query's execution plan:
133133

134-
![showplan](./media/tutorial-qds-sql-server/showplan.png)
134+
![Screenshot showing the query's execution plan.](./media/tutorial-qds-sql-server/showplan.png)
135135

136136
## Next steps
137137

docs/azure-data-studio/tutorial-sql-editor.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,11 @@ Azure Data Studio provides many built-in T-SQL snippets for quickly creating sta
6161

6262
2. Type **sql** in the editor, arrow down to **sqlCreateStoredProcedure**, and press the *Tab* key (or *Enter*) to load the create stored procedure snippet.
6363

64-
![snippet-list](./media/tutorial-sql-editor/snippet-list.png)
64+
![Screenshot showing the Query Editor with sql typed in the editor and the sqlCreateStoredProcedure option called out.](./media/tutorial-sql-editor/snippet-list.png)
6565

6666
3. The create stored procedure snippet has two fields set up for quick edit, *StoredProcedureName* and *SchemaName*. Select *StoredProcedureName*, right-click, and select **Change All Occurrences**. Now type *getCustomer* and all *StoredProcedureName* entries change to *getCustomer*.
6767

68-
![snippet](./media/tutorial-sql-editor/snippet.png)
68+
![Screenshot showing the Query Editor with the Change All Occurrences option called out.](./media/tutorial-sql-editor/snippet.png)
6969

7070
5. Change all occurrences of *SchemaName* to *dbo*.
7171
6. The snippet contains placeholder parameters and body text that needs updating. The *EXECUTE* statement also contains placeholder text because it doesn't know how many parameters the procedure will have. For this tutorial update the snippet so it looks like the following code:

docs/database-engine/install-windows/change-the-database-compatibility-mode-and-use-the-query-store.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ The upgrade process to enable new query processor functionality is related to th
4040
4141
The recommended workflow for upgrading the query processor to the latest version of the code is documented in the [Keep performance stability during the upgrade to newer SQL Server section of Query Store Usage Scenarios](../../relational-databases/performance/query-store-usage-scenarios.md#CEUpgrade), as seen below.
4242

43-
![query-store-usage-5](../../relational-databases/performance/media/query-store-usage-5.png "query-store-usage-5")
43+
![Diagram showing the recommended workflow for upgrading the query processor to the latest version of the code.](../../relational-databases/performance/media/query-store-usage-5.png "query-store-usage-5")
4444

4545
Starting with [!INCLUDE[ssManStudioFull](../../includes/ssmanstudiofull-md.md)] v18, users can be guided through the recommended workflow using the Query Tuning Assistant. For more information, see [Upgrading Databases by using the Query Tuning Assistant](../../relational-databases/performance/upgrade-dbcompat-using-qta.md).
4646

docs/database-engine/install-windows/view-and-read-sql-server-setup-log-files.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ SQL Server Setup creates log files in a dated and time-stamped folder within **\
3838
| **For unattended installations** | %temp%\sqlsetup*.log |
3939

4040

41-
![setup-bootstrap-example.png](media/view-and-read-sql-server-setup-log-files/setup-bootstrap-example.png)
41+
![Screenshot showing where to find the ConfigurationFiles.ini file in the Setup Bootstrap folder.](media/view-and-read-sql-server-setup-log-files/setup-bootstrap-example.png)
4242

4343
>[!NOTE]
4444
> The numbers in the path *nnn* correspond to the version of SQL being installed. In the above picture, SQL 2017 was installed, so the folder is 140. For SQL 2016, the folder would be 130, and for SQL 2014 the folder would be 120.

docs/relational-databases/backup-restore/sql-server-vss-writer-backup-guide.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ VSS coordinates the activities of the following cooperating components:
4747

4848
VSS provides coordination between these parties:
4949

50-
![Coordinations](media/sql-server-vss-writer-backup-guide/coordinations.png)
50+
![Diagram showing how VSS provides coordination between these parties.](media/sql-server-vss-writer-backup-guide/coordinations.png)
5151

5252
This diagram shows all the components participating in a typical VSS snapshot activity. In such a scenario, SQL Server (including the SQL writer) is acting as a writer in one of the Writer boxes. Other such writers might be Exchange Server, etc.
5353

docs/relational-databases/lesson-1-connecting-to-the-database-engine.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,11 @@ At least one administrator account was selected when [!INCLUDE[ssNoVersion_md](.
6969

7070
2. Select **Database Engine**.
7171

72-
![object-explorer](../relational-databases/media/object-explorer.png)
72+
![Screenshot of the Object Explorer showing the Connect dropdown list and the Database Engine option called out.](../relational-databases/media/object-explorer.png)
7373

7474
3. In the **Server name** box, type the name of the instance of the [!INCLUDE[ssDE](../includes/ssde-md.md)]. For the default instance of SQL Server, the server name is the computer name. For a named instance of SQL Server, the server name is the _\<computer_name\>_**\\**_\<instance_name\>_, such as **ACCTG_SRVR\SQLEXPRESS**. The following screenshot shows connecting to the default (un-named) instance of [!INCLUDE[ssNoVersion_md](../includes/ssnoversion-md.md)] on a computer named 'PracticeComputer'. The user logged into Windows is Mary from the Contoso domain. When using Windows Authentication you cannot change the user name.
7575

76-
![connect-to-server](../relational-databases/media/connect-to-server.png)
76+
![Screenshot of the Connect to Server dialog box with the Server name text box called out.](../relational-databases/media/connect-to-server.png)
7777

7878
4. Click **Connect**.
7979

@@ -92,7 +92,7 @@ Now that you have connected to [!INCLUDE[ssNoVersion](../includes/ssnoversion-md
9292

9393
2. On the **General** page, in the **Login name** box, type a Windows login in the format: `<domain>\\<login>`
9494

95-
![new-login](../relational-databases/media/new-login.png)
95+
![Screenshot of the Login - New dialog box with the Login name text box called out.](../relational-databases/media/new-login.png)
9696

9797
3. In the **Default database** box, select [!INCLUDE[ssSampleDBobject](../includes/sssampledbobject-md.md)] if available. Otherwise select **master**.
9898
4. On the **Server Roles** page, if the new login is to be an administrator, click **sysadmin**, otherwise leave this blank.

docs/relational-databases/tables/manage-retention-of-historical-data-in-system-versioned-temporal-tables.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ A partitioning configuration task creates the initial partitioning configuration
174174

175175
The following picture shows initial partitioning configuration to keep 6 months of data.
176176

177-
![Partitioning](../../relational-databases/tables/media/partitioning.png "Partitioning")
177+
![Diagram showing initial partitioning configuration to keep six months of data.](../../relational-databases/tables/media/partitioning.png "Partitioning")
178178

179179
> [!NOTE]
180180
> See Performance considerations with table partitioning below for the performance implications of using RANGE LEFT versus RANGE RIGHT when configuring partitioning.
@@ -183,7 +183,7 @@ The first and last partition are "open" on lower and upper boundaries respective
183183

184184
The following picture illustrates the recurring partition maintenance tasks (see detailed steps below).
185185

186-
![Partitioning2](../../relational-databases/tables/media/partitioning2.png "Partitioning2")
186+
![Diagram showing the recurring partition maintenance tasks.](../../relational-databases/tables/media/partitioning2.png "Partitioning2")
187187

188188
The detailed steps for the recurring partition maintenance tasks are:
189189

@@ -317,7 +317,7 @@ It is important to perform the MERGE and SPLIT RANGE operations to avoid any dat
317317

318318
Let's first visually explain meaning of the RANGE LEFT and RANGE RIGHT options:
319319
320-
![Partitioning3](../../relational-databases/tables/media/partitioning3.png "Partitioning3")
320+
![Diagram showing the RANGE LEFT and RANGE RIGHT options.](../../relational-databases/tables/media/partitioning3.png "Partitioning3")
321321
322322
When you define a partition function as RANGE LEFT, the specified values are the upper boundaries of the partitions. When you use RANGE RIGHT, the specified values are the lower boundaries of the partitions. When you use the MERGE RANGE operation to remove a boundary from the partition function definition, the underlying implementation also removes the partition which contains the boundary. If that partition is not empty, data will be moved to the partition that is result of MERGE RANGE operation.
323323
@@ -338,7 +338,7 @@ The cleanup logic is the same for every temporal table, so it can be automated r
338338
339339
The following diagram illustrates how your cleanup logic should be organized for a single table to reduce impact on the running workloads.
340340
341-
![CustomCleanUpScriptDiagram](../../relational-databases/tables/media/customcleanupscriptdiagram.png "CustomCleanUpScriptDiagram")
341+
![Diagram showing how your cleanup logic should be organized for a single table to reduce impact on the running workloads.](../../relational-databases/tables/media/customcleanupscriptdiagram.png "CustomCleanUpScriptDiagram")
342342
343343
Here are some high-level guidelines for implementing the process. Schedule cleanup logic to run every day and iterate over all temporal tables that need data cleanup. Use SQL Server Agent or different tool to schedule this process:
344344

docs/relational-databases/tables/temporal-table-usage-scenarios.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ Temporal system-versioned tables allow you to plan for data audit scenarios in t
2727
The following diagram shows an Employee table scenario with the data sample including current (marked with blue color) and historical row versions (marked with grey color).
2828
The right-hand portion of the diagram visualizes row versions on time axis and what are the rows you select with different types of querying on temporal table with or without SYSTEM_TIME clause.
2929

30-
![TemporalUsageScenario1](../../relational-databases/tables/media/temporalusagescenario1.png "TemporalUsageScenario1")
30+
![Diagram showing the first Temporal Usage scenario.](../../relational-databases/tables/media/temporalusagescenario1.png "TemporalUsageScenario1")
3131

3232
### Enabling system-versioning on a new table for data audit
3333

@@ -170,7 +170,7 @@ Examples of the real-world scenarios that fit well into this category are invent
170170

171171
The following diagram shows simplified data model used for inventory management:
172172

173-
![TemporalUsageInMemory](../../relational-databases/tables/media/temporalusageinmemory.png "TemporalUsageInMemory")
173+
![Diagram showing simplified data model used for inventory management.](../../relational-databases/tables/media/temporalusageinmemory.png "TemporalUsageInMemory")
174174

175175
The following code example creates ProductInventory as an in-memory system-versioned temporal table with a clustered columnstore index on the history table (which actually replaces the row-store index created by default):
176176

@@ -256,7 +256,7 @@ END;
256256

257257
The spUpdateInventory stored procedure either inserts a new product in the inventory or updates the product quantity for the particular location. The business logic is very simple and focused on maintaining the latest state accurate all the time by incrementing / decrementing the Quantity field through table update, while system-versioned tables transparently add history dimension to the data, as depicted on the diagram below.
258258

259-
![TemporalUsageInMemory2b](../../relational-databases/tables/media/temporalusageinmemory2b.png "TemporalUsageInMemory2b")
259+
![Diagram showing Temporal Usage with current usage In-Memory and historic usage in a clustered columnstore.](../../relational-databases/tables/media/temporalusageinmemory2b.png "TemporalUsageInMemory2b")
260260

261261
Now, querying of the latest state can be performed efficiently from the natively compiled module:
262262

@@ -290,7 +290,7 @@ SELECT * FROM vw_GetProductInventoryHistory
290290

291291
The diagram below shows the data history for one product which can be easily rendered importing the view above in the Power Query, Power BI or similar business intelligence tool:
292292

293-
![ProductHistoryOverTime](../../relational-databases/tables/media/producthistoryovertime.png "ProductHistoryOverTime")
293+
![Diagram showing the data history for one product.](../../relational-databases/tables/media/producthistoryovertime.png "ProductHistoryOverTime")
294294

295295
Temporal tables can be used in this scenario to perform other types of time travel analysis, such as reconstructing the state of the inventory AS OF any point in time in the past or comparing snapshots that belong to different moments in time.
296296

@@ -343,7 +343,7 @@ SELECT * FROM vw_ProductInventoryDetails
343343

344344
The following picture shows the execution plan generated for the SELECT query. This illustrates that all complexity of dealing with temporal relations is fully handled by the SQL Server engine:
345345

346-
![ASOFExecutionPlan](../../relational-databases/tables/media/asofexecutionplan.png "ASOFExecutionPlan")
346+
![Diagram showing the execution plan generated for the SELECT query illustrating that all complexity of dealing with temporal relations is fully handled by the SQL Server engine.](../../relational-databases/tables/media/asofexecutionplan.png "ASOFExecutionPlan")
347347

348348
Use the following code to compare state of product inventory between two points in time (a day ago and a month ago):
349349

@@ -385,7 +385,7 @@ CREATE TABLE [dbo].[Product]
385385

386386
The following diagram shows the purchases over time:
387387

388-
![TemporalAnomalyDetection](../../relational-databases/tables/media/temporalanomalydetection.png "TemporalAnomalyDetection")
388+
![Diagram showing the purchases over time.](../../relational-databases/tables/media/temporalanomalydetection.png "TemporalAnomalyDetection")
389389

390390
Assuming that during the regular days number of purchased products has small variance, the following query identifies singleton outliers - samples which difference compared to their immediate neighbors is significant (2x), while surrounding samples do not differ significantly (less than 20%):
391391

@@ -461,7 +461,7 @@ No additional code is required to maintain SCD during the data warehouse loading
461461

462462
The following illustration shows how you can use Temporal Tables in a simple scenario involving 2 SCDs (DimLocation and DimProduct) and one fact table.
463463

464-
![TemporalSCD](../../relational-databases/tables/media/temporalscd.png "TemporalSCD")
464+
![Diagram showing how you can use Temporal Tables in a simple scenario involving 2 SCDs (DimLocation and DimProduct) and one fact table.](../../relational-databases/tables/media/temporalscd.png "TemporalSCD")
465465

466466
In order to use above SCDs in reports, you need to effectively adjust querying. For example, you might want to calculate the total sales amount and the average number of sold products per capita for the last six months. Note that both metrics requires the correlation of data from the fact table and dimensions that might have changed their attributes important for the analysis (DimLocation.NumOfCustomers, DimProduct.UnitPrice). The following query properly calculates the required metrics:
467467

@@ -534,13 +534,13 @@ This stored procedure takes @EmployeeID and @versionNumber as input parameters.
534534

535535
The following picture shows state of the row before and after the procedure invocation. Red rectangle marks current row version that is incorrect, while green rectangle marks correct version from the history.
536536

537-
![TemporalUsageRepair1](../../relational-databases/tables/media/temporalusagerepair1.png "TemporalUsageRepair1")
537+
![Screenshot showing the state of the row before and after the procedure invocation](../../relational-databases/tables/media/temporalusagerepair1.png "TemporalUsageRepair1")
538538

539539
```sql
540540
EXEC sp_RepairEmployeeRecord @EmployeeID = 1, @versionNumber = 1
541541
```
542542

543-
![TemporalUsageRepair2](../../relational-databases/tables/media/temporalusagerepair2.png "TemporalUsageRepair2")
543+
![Screenshot showing the corrected row.](../../relational-databases/tables/media/temporalusagerepair2.png "TemporalUsageRepair2")
544544

545545
This repair stored procedure can be defined to accept an exact timestamp instead of row version. It will restore row to any version that was active for the point in time provided (i.e. AS OF point in time).
546546

@@ -562,11 +562,11 @@ UPDATE Employee
562562

563563
For the same data sample the following picture illustrates repair scenario with time condition. Highlighted are @asOf parameter, selected row in the history that was actual at the provided point in time and new row version in the current table after repair operation:
564564

565-
![TemporalUsageRepair3](../../relational-databases/tables/media/temporalusagerepair3.png "TemporalUsageRepair3")
565+
![Screenshot showing the repair scenario with time condition.](../../relational-databases/tables/media/temporalusagerepair3.png "TemporalUsageRepair3")
566566

567567
Data correction can become part of automated data loading in data warehousing and reporting systems. If a newly updated value is not correct then, in many scenarios, restoring the previous version from history is good enough mitigation. The following diagram shows how this process can be automated:
568568

569-
![TemporalUsageRepair4](../../relational-databases/tables/media/temporalusagerepair4.png "TemporalUsageRepair4")
569+
![Diagram showing how the process can be automated.](../../relational-databases/tables/media/temporalusagerepair4.png "TemporalUsageRepair4")
570570

571571
## Next steps
572572

docs/relational-databases/tables/temporal-tables.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ Real data sources are dynamic and more often than not business decisions rely on
7373

7474
The current table contains the current value for each row. The history table contains each previous value for each row, if any, and the start time and end time for the period for which it was valid.
7575

76-
![Temporal-HowWorks](../../relational-databases/tables/media/temporal-howworks.PNG "Temporal-HowWorks")
76+
![Diagram showing how a Temporal table works.](../../relational-databases/tables/media/temporal-howworks.PNG "Temporal-HowWorks")
7777

7878
The following simple example illustrates a scenario with Employee information in hypothetical HR database:
7979

@@ -105,7 +105,7 @@ WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.EmployeeHistory));
105105

106106
The **SELECT** statement **FROM**_\<table\>_ clause has a new clause **FOR SYSTEM_TIME** with five temporal-specific sub-clauses to query data across the current and history tables. This new **SELECT** statement syntax is supported directly on a single table, propagated through multiple joins, and through views on top of multiple temporal tables.
107107

108-
![Temporal-Querying](../../relational-databases/tables/media/temporal-querying.PNG "Temporal-Querying")
108+
![Diagram showing how Temporal Querying works.](../../relational-databases/tables/media/temporal-querying.PNG "Temporal-Querying")
109109

110110
The following query searches for row versions for Employee row with EmployeeID = 1000 that were active at least for a portion of period between 1st January of 2014 and 1st January 2015 (including the upper boundary):
111111

docs/reporting-services/tutorial-format-text-report-builder.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ In this section, you rotate some of the text in the table from the previous sect
255255

256256
Now the text in the `[Territory]` cell runs vertically from the bottom to the top of the cells.
257257

258-
![report-builder-format-rotate-270](../reporting-services/media/report-builder-format-rotate-270.png)
258+
![Screenshot showing the Territory values rotated 270 degrees.](../reporting-services/media/report-builder-format-rotate-270.png)
259259

260260
## <a name="FormatCurrency"></a>Format Currency
261261

0 commit comments

Comments
 (0)