<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>AzureOps</title>
	<atom:link href="https://azureops.org/feed/" rel="self" type="application/rss+xml" />
	<link>https://azureops.org/</link>
	<description>Notable things about Cloud, Data and DevOps.</description>
	<lastBuildDate>Fri, 03 Apr 2026 11:04:24 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://i0.wp.com/azureops.org/wp-content/uploads/2021/04/cropped-android-chrome-512x512-1.png?fit=32%2C32&#038;ssl=1</url>
	<title>AzureOps</title>
	<link>https://azureops.org/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">190208641</site>	<item>
		<title>Migrate SSRS Reports to Power BI Report Server</title>
		<link>https://azureops.org/articles/migrate-ssrs-reports-to-power-bi-report-server/</link>
		
		<dc:creator><![CDATA[Vidhi Gattani]]></dc:creator>
		<pubDate>Fri, 03 Apr 2026 10:44:58 +0000</pubDate>
				<category><![CDATA[Microsoft BI]]></category>
		<category><![CDATA[SSRS]]></category>
		<category><![CDATA[migrate ssrs reports]]></category>
		<guid isPermaLink="false">https://azureops.org/?p=9294</guid>

					<description><![CDATA[<p>Learn how to migrate SSRS reports to Power BI report server in just a few clicks using SSRS Reports Migration Wizard.</p>
<p>The post <a href="https://azureops.org/articles/migrate-ssrs-reports-to-power-bi-report-server/">Migrate SSRS Reports to Power BI Report Server</a> appeared first on <a href="https://azureops.org">AzureOps</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="">In today’s data-driven world, organizations are rapidly modernizing their reporting systems to keep up with growing business demands. One of the most effective transformations is to <strong>migrate SSRS reports to Power BI Report Server</strong>, enabling businesses to unlock advanced analytics, better performance, and improved scalability.</p>



<p class="">Traditional reporting systems like SSRS have served enterprises well for years. However, with the rise of interactive dashboards and real-time insights, companies now require more dynamic and visually rich reporting solutions. This is where Power BI Report Server steps in.<br>This article provides a complete guide to help you understand the migration process, benefits, and a real-world use case where 2000+ reports were successfully migrated.</p>



<h2 class="wp-block-heading">Real-World Use Case: 2000+ Reports Migration</h2>



<p class="">Large-scale migrations are often viewed as high-risk, time-consuming projects. However, leveraging the right automation tools changes the math entirely.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class=""><strong>The Benchmark:</strong> In a recent enterprise deployment, we successfully migrated over <strong>2,000 reports</strong> in approximately <strong>40 minutes</strong> using <a href="https://ssrsmigrationwizard.azureops.org/" target="_blank" rel="noreferrer noopener">SSRS Reports Migration Wizard</a>.</p>
</blockquote>



<h3 class="wp-block-heading">Why Organizations are Making the Switch</h3>



<ul class="wp-block-list">
<li class=""><strong>Unified UX:</strong> Consolidate Power BI reports (.pbix) and paginated reports (.rdl) into a single portal.</li>



<li class=""><strong>Enhanced Performance:</strong> Improved processing engines and scalability.</li>



<li class=""><strong>Legacy Debt Reduction:</strong> Modernizing connection strings and centralizing data sources.</li>



<li class=""><strong>Interactive Analytics:</strong> Moving beyond static tables to drill-through dashboards.</li>
</ul>



<p class="">This use case clearly demonstrates that with the right strategy, even large-scale migrations can be executed efficiently.</p>



<h2 class="wp-block-heading">Strategic Migration Workflow</h2>



<p class="">To efficiently <strong>migrate SSRS reports to Power BI Report Server</strong>, follow this streamlined process:</p>



<h3 class="wp-block-heading">Step 1: Select the Source</h3>



<ul class="wp-block-list">
<li class="">Choose the <strong>SSRS/Poweer BI Report server</strong> or import a <strong>.SRMW file</strong></li>



<li class="">Ensure the source environment is accessible</li>
</ul>



<figure class="wp-block-image size-full is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-choose-source-server-1.jpg?ssl=1"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="749" height="620" data-attachment-id="9306" data-permalink="https://azureops.org/articles/migrate-ssrs-reports-to-power-bi-report-server/image-border-editor-https-www-tuxpi-com-photo-effects-borders-12/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-choose-source-server-1.jpg?fit=749%2C620&amp;ssl=1" data-orig-size="749,620" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;Image Border Editor: https://www.tuxpi.com/photo-effects/borders&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Image Border Editor: https://www.tuxpi.com/photo-effects/borders" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-choose-source-server-1.jpg?fit=300%2C248&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-choose-source-server-1.jpg?fit=749%2C620&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-choose-source-server-1.jpg?resize=749%2C620&#038;ssl=1" alt="migrate ssrs reports to power bi" class="wp-image-9306" style="width:575px;height:auto" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-choose-source-server-1.jpg?w=749&amp;ssl=1 749w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-choose-source-server-1.jpg?resize=300%2C248&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-choose-source-server-1.jpg?resize=450%2C372&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-choose-source-server-1.jpg?resize=600%2C497&amp;ssl=1 600w" sizes="(max-width: 749px) 100vw, 749px" /></a></figure>



<h3 class="wp-block-heading">Step 2: Select the Target</h3>



<ul class="wp-block-list">
<li class="">Provide connection details for the <strong>Power BI Report Server</strong></li>



<li class="">Choose destination (same server/different server/folder)</li>



<li class="">Validate connectivity</li>
</ul>



<figure class="wp-block-image size-full is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-chosse-target-server-1.jpg?ssl=1"><img data-recalc-dims="1" decoding="async" width="744" height="615" data-attachment-id="9308" data-permalink="https://azureops.org/articles/migrate-ssrs-reports-to-power-bi-report-server/image-border-editor-https-www-tuxpi-com-photo-effects-borders-14/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-chosse-target-server-1.jpg?fit=744%2C615&amp;ssl=1" data-orig-size="744,615" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;Image Border Editor: https://www.tuxpi.com/photo-effects/borders&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Image Border Editor: https://www.tuxpi.com/photo-effects/borders" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-chosse-target-server-1.jpg?fit=300%2C248&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-chosse-target-server-1.jpg?fit=744%2C615&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-chosse-target-server-1.jpg?resize=744%2C615&#038;ssl=1" alt="Migrate ssrs reports to power bi report server" class="wp-image-9308" style="width:575px" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-chosse-target-server-1.jpg?w=744&amp;ssl=1 744w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-chosse-target-server-1.jpg?resize=300%2C248&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-chosse-target-server-1.jpg?resize=450%2C372&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-chosse-target-server-1.jpg?resize=600%2C496&amp;ssl=1 600w" sizes="(max-width: 744px) 100vw, 744px" /></a></figure>



<h3 class="wp-block-heading">Step 3: Choose Report Items to Migrate</h3>



<ul class="wp-block-list">
<li class="">Select reports, folders, datasets, and data sources</li>



<li class="">Use filters for bulk selection </li>
</ul>



<figure class="wp-block-image size-full is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/select-ssrs-objects.png?ssl=1"><img decoding="async" width="748" height="618" data-attachment-id="9340" data-permalink="https://azureops.org/articles/migrate-ssrs-reports-to-power-bi-report-server/select-ssrs-objects/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/select-ssrs-objects.png?fit=748%2C618&amp;ssl=1" data-orig-size="748,618" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="select ssrs objects" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/select-ssrs-objects.png?fit=300%2C248&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/select-ssrs-objects.png?fit=748%2C618&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/select-ssrs-objects.png?fit=748%2C618&amp;ssl=1" alt="" class="wp-image-9340" style="width:575px" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/select-ssrs-objects.png?w=748&amp;ssl=1 748w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/select-ssrs-objects.png?resize=300%2C248&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/select-ssrs-objects.png?resize=450%2C372&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/select-ssrs-objects.png?resize=600%2C496&amp;ssl=1 600w" sizes="(max-width: 748px) 100vw, 748px" /></a></figure>



<h3 class="wp-block-heading">Step 4: Manage Folder Mapping</h3>



<p class="">This step is available when <strong>“Rename target folders during migration”</strong> is enabled. It is useful for organizing and restructuring reports in the target environment.</p>



<ul class="wp-block-list">
<li class="">Rename folders during migration<br>Example: <em>Finance → Finance_New</em></li>



<li class="">Migrate to a different folder name<br>Example: <em>Reports → Prod_Reports</em></li>



<li class="">Consolidate multiple folders into one<br>Sales Asia, Sales EU, Sales NA → Sales</li>
</ul>



<figure class="wp-block-image size-full is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-manage-folder-mapping.jpg?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="746" height="618" data-attachment-id="9310" data-permalink="https://azureops.org/articles/migrate-ssrs-reports-to-power-bi-report-server/image-border-editor-https-www-tuxpi-com-photo-effects-borders-16/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-manage-folder-mapping.jpg?fit=746%2C618&amp;ssl=1" data-orig-size="746,618" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;Image Border Editor: https://www.tuxpi.com/photo-effects/borders&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Image Border Editor: https://www.tuxpi.com/photo-effects/borders" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-manage-folder-mapping.jpg?fit=300%2C249&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-manage-folder-mapping.jpg?fit=746%2C618&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-manage-folder-mapping.jpg?resize=746%2C618&#038;ssl=1" alt="" class="wp-image-9310" style="width:575px" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-manage-folder-mapping.jpg?w=746&amp;ssl=1 746w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-manage-folder-mapping.jpg?resize=300%2C249&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-manage-folder-mapping.jpg?resize=450%2C373&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-manage-folder-mapping.jpg?resize=600%2C497&amp;ssl=1 600w" sizes="auto, (max-width: 746px) 100vw, 746px" /></a></figure>



<h3 class="wp-block-heading">Step 5: Update Data Source Connection Strings</h3>



<ul class="wp-block-list">
<li class="">Fetch all data sources used in selected reports</li>



<li class="">Review and edit connection strings</li>



<li class="">Update credentials manually</li>



<li class="">Optionally convert embedded sources to shared sources</li>



<li class="">Changes apply only after migration completes</li>
</ul>



<figure class="wp-block-image size-full is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-update-Data-Source-Connection-Strings-.jpg?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="617" data-attachment-id="9311" data-permalink="https://azureops.org/articles/migrate-ssrs-reports-to-power-bi-report-server/image-border-editor-https-www-tuxpi-com-photo-effects-borders-17/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-update-Data-Source-Connection-Strings-.jpg?fit=750%2C617&amp;ssl=1" data-orig-size="750,617" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;Image Border Editor: https://www.tuxpi.com/photo-effects/borders&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Image Border Editor: https://www.tuxpi.com/photo-effects/borders" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-update-Data-Source-Connection-Strings-.jpg?fit=300%2C247&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-update-Data-Source-Connection-Strings-.jpg?fit=750%2C617&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-update-Data-Source-Connection-Strings-.jpg?resize=750%2C617&#038;ssl=1" alt="update data source connection details using SSRS Reports Migration Wizard. " class="wp-image-9311" style="width:575px" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-update-Data-Source-Connection-Strings-.jpg?w=750&amp;ssl=1 750w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-update-Data-Source-Connection-Strings-.jpg?resize=300%2C247&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-update-Data-Source-Connection-Strings-.jpg?resize=450%2C370&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-update-Data-Source-Connection-Strings-.jpg?resize=600%2C494&amp;ssl=1 600w" sizes="auto, (max-width: 750px) 100vw, 750px" /></a></figure>



<h3 class="wp-block-heading">Step 6: Review Changes</h3>



<ul class="wp-block-list">
<li class="">Verify summary of new, updated, and skipped items</li>



<li class="">Export summary if needed</li>



<li class="">Confirm configurations before execution</li>
</ul>



<figure class="wp-block-image size-full is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-review-changes.jpg?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="745" height="620" data-attachment-id="9312" data-permalink="https://azureops.org/articles/migrate-ssrs-reports-to-power-bi-report-server/image-border-editor-https-www-tuxpi-com-photo-effects-borders-18/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-review-changes.jpg?fit=745%2C620&amp;ssl=1" data-orig-size="745,620" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;Image Border Editor: https://www.tuxpi.com/photo-effects/borders&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Image Border Editor: https://www.tuxpi.com/photo-effects/borders" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-review-changes.jpg?fit=300%2C250&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-review-changes.jpg?fit=745%2C620&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-review-changes.jpg?resize=745%2C620&#038;ssl=1" alt="" class="wp-image-9312" style="aspect-ratio:1.2016522718738265;object-fit:cover;width:575px" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-review-changes.jpg?w=745&amp;ssl=1 745w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-review-changes.jpg?resize=300%2C250&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-review-changes.jpg?resize=450%2C374&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-review-changes.jpg?resize=600%2C499&amp;ssl=1 600w" sizes="auto, (max-width: 745px) 100vw, 745px" /></a></figure>



<h3 class="wp-block-heading">Step 7: Finish and Validate</h3>



<ul class="wp-block-list">
<li class="">Execute migration</li>



<li class="">Review logs and migration summary</li>



<li class="">Validate data accuracy and report performance</li>



<li class="">Rerun process if needed</li>
</ul>



<figure class="wp-block-image size-full is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-finish-and-validate.jpg?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="746" height="619" data-attachment-id="9314" data-permalink="https://azureops.org/articles/migrate-ssrs-reports-to-power-bi-report-server/image-border-editor-https-www-tuxpi-com-photo-effects-borders-19/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-finish-and-validate.jpg?fit=746%2C619&amp;ssl=1" data-orig-size="746,619" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;Image Border Editor: https://www.tuxpi.com/photo-effects/borders&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Image Border Editor: https://www.tuxpi.com/photo-effects/borders" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-finish-and-validate.jpg?fit=300%2C249&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-finish-and-validate.jpg?fit=746%2C619&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-finish-and-validate.jpg?resize=746%2C619&#038;ssl=1" alt="" class="wp-image-9314" style="aspect-ratio:1.2051748075224031;object-fit:cover;width:575px" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-finish-and-validate.jpg?w=746&amp;ssl=1 746w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-finish-and-validate.jpg?resize=300%2C249&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-finish-and-validate.jpg?resize=450%2C373&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/04/Migration-Process-finish-and-validate.jpg?resize=600%2C498&amp;ssl=1 600w" sizes="auto, (max-width: 746px) 100vw, 746px" /></a></figure>



<h2 class="wp-block-heading">Installation</h2>



<p class="">SSRS Reports Migration Wizard can be installed as an extension to:</p>



<p class="">1.&nbsp;<a href="https://marketplace.visualstudio.com/items?itemName=AzureOps.srmw1719" target="_blank" rel="noreferrer noopener">Visual Studio 2017</a>,&nbsp;<a href="https://marketplace.visualstudio.com/items?itemName=AzureOps.srmw1719" target="_blank" rel="noreferrer noopener">Visual Studio 2019</a>, <a href="https://marketplace.visualstudio.com/items?itemName=AzureOps.srmw2022" target="_blank" rel="noreferrer noopener">Visual Studio 2022</a> &amp;&nbsp;<a href="https://marketplace.visualstudio.com/items?itemName=AzureOps.srmw2022" target="_blank" rel="noreferrer noopener">Visual Studio 2026</a>.<br>2. SSMS 18, 19, 20, 21, 22<br>3. Standalone tool.</p>



<h2 class="wp-block-heading">Standalone Usage</h2>



<p class="">Don’t use Visual Studio? You can still run the wizard as a standalone tool:</p>



<p class="">Launch <code>SSRS.Reports.Migration.Wizard.exe</code>.</p>



<p class="">Download the <code>.vsix</code> from <a class="" href="https://marketplace.visualstudio.com/items?itemName=AzureOps.ssrsmigrationwizard">here</a>.</p>



<p class="">Rename the <code>.vsix</code> to <code>.zip</code> and extract it.</p>



<h2 class="wp-block-heading">FAQ</h2>


<div class="wp-block-uagb-faq uagb-faq__outer-wrap uagb-block-79d5bc0c uagb-faq-icon-row uagb-faq-layout-accordion uagb-faq-expand-first-true uagb-faq-inactive-other-true uagb-faq__wrap uagb-buttons-layout-wrap uagb-faq-equal-height     " data-faqtoggle="true" role="tablist"><div class="wp-block-uagb-faq-child uagb-faq-child__outer-wrap uagb-faq-item uagb-block-b6c54f29 " role="tab" tabindex="0"><div class="uagb-faq-questions-button uagb-faq-questions">			<span class="uagb-icon uagb-faq-icon-wrap">
								<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 448 512"><path d="M432 256c0 17.69-14.33 32.01-32 32.01H256v144c0 17.69-14.33 31.99-32 31.99s-32-14.3-32-31.99v-144H48c-17.67 0-32-14.32-32-32.01s14.33-31.99 32-31.99H192v-144c0-17.69 14.33-32.01 32-32.01s32 14.32 32 32.01v144h144C417.7 224 432 238.3 432 256z"></path></svg>
							</span>
						<span class="uagb-icon-active uagb-faq-icon-wrap">
								<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 448 512"><path d="M400 288h-352c-17.69 0-32-14.32-32-32.01s14.31-31.99 32-31.99h352c17.69 0 32 14.3 32 31.99S417.7 288 400 288z"></path></svg>
							</span>
			<span class="uagb-question">1. Why should I migrate SSRS reports to Power BI Report Server?</span></div><div class="uagb-faq-content"><p>It enhances visualization, improves performance, and supports modern BI needs.</p></div></div><div class="wp-block-uagb-faq-child uagb-faq-child__outer-wrap uagb-faq-item uagb-block-178b70ac " role="tab" tabindex="0"><div class="uagb-faq-questions-button uagb-faq-questions">			<span class="uagb-icon uagb-faq-icon-wrap">
								<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 448 512"><path d="M432 256c0 17.69-14.33 32.01-32 32.01H256v144c0 17.69-14.33 31.99-32 31.99s-32-14.3-32-31.99v-144H48c-17.67 0-32-14.32-32-32.01s14.33-31.99 32-31.99H192v-144c0-17.69 14.33-32.01 32-32.01s32 14.32 32 32.01v144h144C417.7 224 432 238.3 432 256z"></path></svg>
							</span>
						<span class="uagb-icon-active uagb-faq-icon-wrap">
								<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 448 512"><path d="M400 288h-352c-17.69 0-32-14.32-32-32.01s14.31-31.99 32-31.99h352c17.69 0 32 14.3 32 31.99S417.7 288 400 288z"></path></svg>
							</span>
			<span class="uagb-question">2. Can large-scale migrations (2000+ reports) be automated?</span></div><div class="uagb-faq-content"><p>Yes, automation tools and scripts make large migrations efficient.</p></div></div><div class="wp-block-uagb-faq-child uagb-faq-child__outer-wrap uagb-faq-item uagb-block-831ca2a0 " role="tab" tabindex="0"><div class="uagb-faq-questions-button uagb-faq-questions">			<span class="uagb-icon uagb-faq-icon-wrap">
								<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 448 512"><path d="M432 256c0 17.69-14.33 32.01-32 32.01H256v144c0 17.69-14.33 31.99-32 31.99s-32-14.3-32-31.99v-144H48c-17.67 0-32-14.32-32-32.01s14.33-31.99 32-31.99H192v-144c0-17.69 14.33-32.01 32-32.01s32 14.32 32 32.01v144h144C417.7 224 432 238.3 432 256z"></path></svg>
							</span>
						<span class="uagb-icon-active uagb-faq-icon-wrap">
								<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 448 512"><path d="M400 288h-352c-17.69 0-32-14.32-32-32.01s14.31-31.99 32-31.99h352c17.69 0 32 14.3 32 31.99S417.7 288 400 288z"></path></svg>
							</span>
			<span class="uagb-question">3. Will existing SSRS reports work without changes?</span></div><div class="uagb-faq-content"><p>Some reports may require modifications for compatibility.</p></div></div><div class="wp-block-uagb-faq-child uagb-faq-child__outer-wrap uagb-faq-item uagb-block-63071efd " role="tab" tabindex="0"><div class="uagb-faq-questions-button uagb-faq-questions">			<span class="uagb-icon uagb-faq-icon-wrap">
								<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 448 512"><path d="M432 256c0 17.69-14.33 32.01-32 32.01H256v144c0 17.69-14.33 31.99-32 31.99s-32-14.3-32-31.99v-144H48c-17.67 0-32-14.32-32-32.01s14.33-31.99 32-31.99H192v-144c0-17.69 14.33-32.01 32-32.01s32 14.32 32 32.01v144h144C417.7 224 432 238.3 432 256z"></path></svg>
							</span>
						<span class="uagb-icon-active uagb-faq-icon-wrap">
								<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 448 512"><path d="M400 288h-352c-17.69 0-32-14.32-32-32.01s14.31-31.99 32-31.99h352c17.69 0 32 14.3 32 31.99S417.7 288 400 288z"></path></svg>
							</span>
			<span class="uagb-question">4. How long does migration take?</span></div><div class="uagb-faq-content"><p>It depends on complexity and volume, but structured approaches reduce timelines.</p></div></div><div class="wp-block-uagb-faq-child uagb-faq-child__outer-wrap uagb-faq-item uagb-block-552bc148 " role="tab" tabindex="0"><div class="uagb-faq-questions-button uagb-faq-questions">			<span class="uagb-icon uagb-faq-icon-wrap">
								<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 448 512"><path d="M432 256c0 17.69-14.33 32.01-32 32.01H256v144c0 17.69-14.33 31.99-32 31.99s-32-14.3-32-31.99v-144H48c-17.67 0-32-14.32-32-32.01s14.33-31.99 32-31.99H192v-144c0-17.69 14.33-32.01 32-32.01s32 14.32 32 32.01v144h144C417.7 224 432 238.3 432 256z"></path></svg>
							</span>
						<span class="uagb-icon-active uagb-faq-icon-wrap">
								<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 448 512"><path d="M400 288h-352c-17.69 0-32-14.32-32-32.01s14.31-31.99 32-31.99h352c17.69 0 32 14.3 32 31.99S417.7 288 400 288z"></path></svg>
							</span>
			<span class="uagb-question">5. Is Power BI Report Server secure?</span></div><div class="uagb-faq-content"><p>Yes, it supports enterprise-grade security and on-premises deployment.</p></div></div><div class="wp-block-uagb-faq-child uagb-faq-child__outer-wrap uagb-faq-item uagb-block-16ccb0fb " role="tab" tabindex="0"><div class="uagb-faq-questions-button uagb-faq-questions">			<span class="uagb-icon uagb-faq-icon-wrap">
								<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 448 512"><path d="M432 256c0 17.69-14.33 32.01-32 32.01H256v144c0 17.69-14.33 31.99-32 31.99s-32-14.3-32-31.99v-144H48c-17.67 0-32-14.32-32-32.01s14.33-31.99 32-31.99H192v-144c0-17.69 14.33-32.01 32-32.01s32 14.32 32 32.01v144h144C417.7 224 432 238.3 432 256z"></path></svg>
							</span>
						<span class="uagb-icon-active uagb-faq-icon-wrap">
								<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 448 512"><path d="M400 288h-352c-17.69 0-32-14.32-32-32.01s14.31-31.99 32-31.99h352c17.69 0 32 14.3 32 31.99S417.7 288 400 288z"></path></svg>
							</span>
			<span class="uagb-question">6. What are the risks involved?</span></div><div class="uagb-faq-content"><p>Common risks include data inconsistencies and compatibility issues, which can be mitigated with proper planning.</p></div></div></div>


<h2 class="wp-block-heading">Conclusion</h2>



<p class="">To successfully <strong>migrate SSRS reports to Power BI Report Server</strong>, organizations must adopt a structured, scalable, and automation-driven approach. As demonstrated in the real-world case of migrating <strong>2000+ reports</strong>, it is possible to achieve seamless transformation with minimal disruption and post migration efforts.</p>



<p class="">By upgrading to Power BI Report Server, businesses gain access to modern analytics, interactive dashboards, and a unified reporting platform that drives better decision-making.</p>



<p class="">Read full customer testimonial on the&nbsp;<a href="https://marketplace.visualstudio.com/items?itemName=AzureOps.srmw2022&amp;ssr=false#review-details" target="_blank" rel="noreferrer noopener">Visual Studio Marketplace</a>.</p>



<h2 class="wp-block-heading">Watch a quick demo</h2>



<iframe loading="lazy" width="700" height="394" src="https://www.youtube.com/embed/U-U-PAzOLP4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>The post <a href="https://azureops.org/articles/migrate-ssrs-reports-to-power-bi-report-server/">Migrate SSRS Reports to Power BI Report Server</a> appeared first on <a href="https://azureops.org">AzureOps</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">9294</post-id>	</item>
		<item>
		<title>Download all SSRS Reports from Report Server</title>
		<link>https://azureops.org/articles/download-all-ssrs-reports-from-report-server/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 01 Feb 2026 15:22:31 +0000</pubDate>
				<category><![CDATA[Microsoft BI]]></category>
		<category><![CDATA[SSRS]]></category>
		<guid isPermaLink="false">https://azureops.org/?p=8842</guid>

					<description><![CDATA[<p>If you are working with SQL Server Reporting Services (SSRS), one of the most common requirements is to download all SSRS Reports from Server in a single operation. This is especially useful when you want to migrate reports to another environment, back them up, or simply analyze the structure of your SSRS instance. Traditionally, administrators [&#8230;]</p>
<p>The post <a href="https://azureops.org/articles/download-all-ssrs-reports-from-report-server/">Download all SSRS Reports from Report Server</a> appeared first on <a href="https://azureops.org">AzureOps</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="">If you are working with <strong>SQL Server Reporting Services (SSRS)</strong>, one of the most common requirements is to <strong>download all SSRS Reports from Server</strong> in a single operation. This is especially useful when you want to migrate reports to another environment, back them up, or simply analyze the structure of your SSRS instance.</p>



<p class="">Traditionally, administrators had to download each report manually from the Report Manager portal, or write complex scripts using SSRS SOAP APIs. Both approaches are time-consuming and prone to errors. Fortunately, there is now an easier way to achieve this: using the <a href="https://ssrsmigrationwizard.azureops.org/">SSRS Reports Migration Wizard</a>.</p>



<h3 class="wp-block-heading">What Is the SSRS Reports Migration Wizard?</h3>



<p class="">The SSRS Reports Migration Wizard is a tool from AzureOps designed to help you migrate SSRS content (native mode) between servers or to/from an SRMW export file.<br>It supports migrating:</p>



<ul class="wp-block-list">
<li class="">Folders</li>



<li class="">Reports</li>



<li class="">Shared datasets</li>



<li class="">Shared data sources</li>



<li class="">Subscriptions</li>



<li class="">Roles</li>
</ul>



<p class="">The wizard gives you a guided interface to select exactly which objects to migrate, and optionally adjust connection strings along the way.</p>



<h3 class="wp-block-heading">When to Use Export + Import via SRMW File</h3>



<p class="">Using an export file gives you flexibility:</p>



<ul class="wp-block-list">
<li class="">You can create a backup snapshot of your reports/datasets/data sources</li>



<li class="">You can move content offline — export on one server, then import later on a different server</li>



<li class="">It helps in server upgrades, consolidation, or reorganizing your SSRS environments</li>
</ul>



<p class="">If you prefer a direct server-to-server migration, that’s also supported by the wizard. But export/import via file is safer and useful, especially when network access or permissions between servers is constrained.</p>



<h3 class="wp-block-heading">Step-by-Step: Exporting SSRS Items to SRMW File</h3>



<p class="">Here is a step-by-step walkthrough of how to carry out the export. You can follow along with the video, or use these instructions with screenshots in your own environment.</p>



<iframe loading="lazy" width="700" height="394" src="https://www.youtube.com/embed/Tbry_czqpBU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>



<h4 class="wp-block-heading">1. Launch the Migration Wizard</h4>



<ul class="wp-block-list">
<li class="">From SQL Server Management Studio (SSMS), open the <strong>SSRS Reports Migration Wizard</strong>.</li>



<li class="">(If installed as an extension, you’ll find it under the <em>Tools</em> menu.)</li>
</ul>



<h4 class="wp-block-heading">2. Start the Export Process</h4>



<ul class="wp-block-list">
<li class="">Click <strong>Next</strong> to begin.</li>



<li class="">Enter the <strong>source SSRS web service URL</strong> (e.g. <code>http://yourservername/reportserver</code>) along with domain credentials.</li>



<li class="">Click <strong>Connect</strong> to load the contents of that SSRS instance.</li>
</ul>



<figure class="wp-block-image size-full is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/select-source.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="593" height="493" data-attachment-id="8662" data-permalink="https://azureops.org/articles/ssrs-report-migration/select-source/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/select-source.png?fit=593%2C493&amp;ssl=1" data-orig-size="593,493" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="select-source" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/select-source.png?fit=300%2C249&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/select-source.png?fit=593%2C493&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/select-source.png?resize=593%2C493&#038;ssl=1" alt="export ssrs reports" class="wp-image-8662" style="width:500px" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/select-source.png?w=593&amp;ssl=1 593w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/select-source.png?resize=300%2C249&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/select-source.png?resize=450%2C374&amp;ssl=1 450w" sizes="auto, (max-width: 593px) 100vw, 593px" /></a></figure>



<h4 class="wp-block-heading">3. Select the Export File Target</h4>



<ul class="wp-block-list">
<li class="">On the next screen, choose the <strong>SRMW file</strong> option as your export target.</li>



<li class="">Browse to the folder where you want the export file to be saved.</li>



<li class="">Specify a file name (for example, <code>MySSRSExport.srmw</code>).</li>



<li class="">Click <strong>Next</strong> to continue.</li>
</ul>



<figure class="wp-block-image size-full is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/select-file-path.png?ssl=1"><img loading="lazy" decoding="async" width="593" height="498" data-attachment-id="8934" data-permalink="https://azureops.org/articles/download-all-ssrs-reports-from-report-server/select-file-path/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/select-file-path.png?fit=593%2C498&amp;ssl=1" data-orig-size="593,498" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="select file path" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/select-file-path.png?fit=300%2C252&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/select-file-path.png?fit=593%2C498&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/select-file-path.png?fit=593%2C498&amp;ssl=1" alt="" class="wp-image-8934" style="width:500px" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/select-file-path.png?w=593&amp;ssl=1 593w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/select-file-path.png?resize=300%2C252&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/select-file-path.png?resize=450%2C378&amp;ssl=1 450w" sizes="auto, (max-width: 593px) 100vw, 593px" /></a></figure>



<h4 class="wp-block-heading">4. Choose SSRS Items to Export</h4>



<ul class="wp-block-list">
<li class="">You’ll see a <strong>tree view</strong> of all SSRS objects: folders, reports, datasets, data sources.</li>



<li class="">Check the boxes next to the items you want to export.</li>



<li class="">After your selection, click <strong>Next</strong>.</li>
</ul>



<figure class="wp-block-image size-full is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/bordered-image-3.png?ssl=1"><img loading="lazy" decoding="async" width="593" height="495" data-attachment-id="8935" data-permalink="https://azureops.org/articles/download-all-ssrs-reports-from-report-server/bordered-image-3/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/bordered-image-3.png?fit=593%2C495&amp;ssl=1" data-orig-size="593,495" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="bordered-image (3)" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/bordered-image-3.png?fit=300%2C250&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/bordered-image-3.png?fit=593%2C495&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/bordered-image-3.png?fit=593%2C495&amp;ssl=1" alt="export ssrs reports to another server" class="wp-image-8935" style="width:500px" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/bordered-image-3.png?w=593&amp;ssl=1 593w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/bordered-image-3.png?resize=300%2C250&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/bordered-image-3.png?resize=450%2C376&amp;ssl=1 450w" sizes="auto, (max-width: 593px) 100vw, 593px" /></a></figure>



<h4 class="wp-block-heading">5. (Optional) Update Data Source Connection Strings</h4>



<ul class="wp-block-list">
<li class="">On the next screen, you can update the <strong>connection strings</strong> and credentials for data sources.</li>



<li class="">These settings will be baked into the SRMW file and used when you later import the content.</li>



<li class="">If you don’t need to change anything, you can skip this.</li>



<li class="">When ready, click <strong>Next</strong> (or <strong>Finish</strong>, depending on wizard layout).</li>
</ul>



<figure class="wp-block-image size-full is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/bordered-image-1.png?ssl=1"><img loading="lazy" decoding="async" width="601" height="499" data-attachment-id="8936" data-permalink="https://azureops.org/articles/download-all-ssrs-reports-from-report-server/bordered-image-1/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/bordered-image-1.png?fit=601%2C499&amp;ssl=1" data-orig-size="601,499" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="bordered-image (1)" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/bordered-image-1.png?fit=300%2C249&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/bordered-image-1.png?fit=601%2C499&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/bordered-image-1.png?fit=601%2C499&amp;ssl=1" alt="" class="wp-image-8936" style="width:500px" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/bordered-image-1.png?w=601&amp;ssl=1 601w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/bordered-image-1.png?resize=300%2C249&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/bordered-image-1.png?resize=450%2C374&amp;ssl=1 450w" sizes="auto, (max-width: 601px) 100vw, 601px" /></a></figure>



<h4 class="wp-block-heading">6. Review &amp; Confirm</h4>



<ul class="wp-block-list">
<li class="">The wizard will show a summary of what will be exported.</li>



<li class="">Confirm your selections and click <strong>Finish</strong> (or <strong>Export</strong>) to start the process.</li>
</ul>



<figure class="wp-block-image size-full is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/review-selections.png?ssl=1"><img loading="lazy" decoding="async" width="594" height="500" data-attachment-id="8937" data-permalink="https://azureops.org/articles/download-all-ssrs-reports-from-report-server/review-selections/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/review-selections.png?fit=594%2C500&amp;ssl=1" data-orig-size="594,500" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="review selections" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/review-selections.png?fit=300%2C253&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/review-selections.png?fit=594%2C500&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/review-selections.png?fit=594%2C500&amp;ssl=1" alt="download-all-ssrs-reports" class="wp-image-8937" style="width:500px" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/review-selections.png?w=594&amp;ssl=1 594w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/review-selections.png?resize=300%2C253&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/review-selections.png?resize=450%2C379&amp;ssl=1 450w" sizes="auto, (max-width: 594px) 100vw, 594px" /></a></figure>



<h4 class="wp-block-heading">7. Complete Export &amp; Verify</h4>



<ul class="wp-block-list">
<li class="">The wizard runs, exporting all chosen items into your SRMW file.</li>



<li class="">When it completes, open File Explorer and navigate to the export folder you chose.</li>



<li class="">You’ll see the <code>.srmw</code> file.</li>



<li class="">(Optionally) You can unzip or inspect its contents to verify that your reports, datasets, and sources are included in the proper folder structure.</li>
</ul>



<figure class="wp-block-image size-full is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/image-1.png?ssl=1"><img loading="lazy" decoding="async" width="1029" height="159" data-attachment-id="8940" data-permalink="https://azureops.org/articles/download-all-ssrs-reports-from-report-server/image-42/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/image-1.png?fit=1029%2C159&amp;ssl=1" data-orig-size="1029,159" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/image-1.png?fit=300%2C46&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/image-1.png?fit=1029%2C159&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/image-1.png?fit=1029%2C159&amp;ssl=1" alt="" class="wp-image-8940" style="width:736px;height:auto" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/image-1.png?w=1029&amp;ssl=1 1029w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/image-1.png?resize=300%2C46&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/image-1.png?resize=768%2C119&amp;ssl=1 768w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/image-1.png?resize=450%2C70&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/image-1.png?resize=600%2C93&amp;ssl=1 600w" sizes="auto, (max-width: 1029px) 100vw, 1029px" /></a></figure>



<h3 class="wp-block-heading">What’s Inside the SRMW File &amp; How It Helps</h3>



<p class="">The SRMW file is essentially a packaged archive that contains:</p>



<ul class="wp-block-list">
<li class="">Report definition files (RDLs)</li>



<li class="">Dataset definitions</li>



<li class="">Data source metadata (connection strings, credentials)</li>



<li class="">The folder hierarchy (to preserve navigation/organization)</li>



<li class="">Standard subscriptions definition, etc.</li>
</ul>



<figure class="wp-block-image size-full is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/image-2.png?ssl=1"><img loading="lazy" decoding="async" width="900" height="297" data-attachment-id="8941" data-permalink="https://azureops.org/articles/download-all-ssrs-reports-from-report-server/image-43/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/image-2.png?fit=900%2C297&amp;ssl=1" data-orig-size="900,297" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/image-2.png?fit=300%2C99&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/image-2.png?fit=900%2C297&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/image-2.png?fit=900%2C297&amp;ssl=1" alt="" class="wp-image-8941" style="width:734px;height:auto" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/image-2.png?w=900&amp;ssl=1 900w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/image-2.png?resize=300%2C99&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/image-2.png?resize=768%2C253&amp;ssl=1 768w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/image-2.png?resize=450%2C149&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/image-2.png?resize=600%2C198&amp;ssl=1 600w" sizes="auto, (max-width: 900px) 100vw, 900px" /></a></figure>



<p class="">When you later run the wizard’s <strong>Import</strong> mode, the tool reads this file and recreates the selected SSRS items into the target server.</p>



<p class="">Using this intermediate file gives you:</p>



<ul class="wp-block-list">
<li class="">A portable, versionable package</li>



<li class="">A safety buffer (you can inspect or edit before import)</li>



<li class="">The ability to stage/migrate content in controlled stages</li>
</ul>



<p class="has-background" style="background-color:#bcefca"><strong>Pro tips:</strong><br>1. Test first with a limited set of reports to ensure everything works as expected.<br>2. Double-check your data sources — mismatches or missing credentials are common issues.<br>3. Use clear naming conventions for your export file (with timestamp) so you know which export is which.<br>4. Keep a backup of your export file in a safe location.<br>5. Make sure the target SSRS server is compatible in terms of version and features.<br>6. Check permissions: the account you use must have sufficient rights on the source SSRS items.<br>7. <a href="https://azureops.org/articles/ssrs-report-migration/">Learn</a> how to migrate SSRS report server items from one report server to another.</p>
<p>The post <a href="https://azureops.org/articles/download-all-ssrs-reports-from-report-server/">Download all SSRS Reports from Report Server</a> appeared first on <a href="https://azureops.org">AzureOps</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8842</post-id>	</item>
		<item>
		<title>Compare Azure SQL Database Schema Using sqlpackage</title>
		<link>https://azureops.org/articles/compare-azure-sql-database-schema-using-sqlpackage/</link>
		
		<dc:creator><![CDATA[Kunal Rathi]]></dc:creator>
		<pubDate>Sat, 10 Jan 2026 19:16:23 +0000</pubDate>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[SQL Database]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">https://azureops.org/?p=9188</guid>

					<description><![CDATA[<p>Learn how to compare two Azure SQL Database Schema effectively and generate delta scripts for seamless deployment.</p>
<p>The post <a href="https://azureops.org/articles/compare-azure-sql-database-schema-using-sqlpackage/">Compare Azure SQL Database Schema Using sqlpackage</a> appeared first on <a href="https://azureops.org">AzureOps</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="">When working with Azure SQL Databases, it is quite common to have multiple environments such as <strong>Dev</strong>, <strong>Test</strong>, <strong>UAT</strong>, and <strong>Production</strong>. Over time, schema drift between these environments becomes inevitable. Before deploying changes to production, it is critical to understand <em>exactly</em> what is different and what will change.</p>



<p class="">In this article, we will see how to <strong>compare Azure SQL database schema using <code>sqlpackage.exe</code></strong> and generate a <strong>delta script</strong> that shows the differences in a controlled and repeatable way. The approach and flow are similar to the DACPAC-based comparison strategy discussed earlier on AzureOps.</p>



<h2 class="wp-block-heading">Why use sqlpackage for database comparison?</h2>



<p class=""><code><a href="https://learn.microsoft.com/en-us/sql/tools/sqlpackage/sqlpackage?view=sql-server-ver17" target="_blank" rel="noreferrer noopener">sqlpackage.exe</a></code> is a command-line utility provided by Microsoft that works with <strong>DACPAC</strong> and <strong>BACPAC</strong> files. Using <code>sqlpackage</code>, you can:</p>



<ul class="wp-block-list">
<li class="">Compare two databases using DACPACs</li>



<li class="">Generate a deployment (delta) script</li>



<li class="">Control destructive changes explicitly</li>



<li class="">Automate comparisons in CI/CD pipelines</li>
</ul>



<p class="">For Azure SQL Database scenarios, this method is especially useful when direct schema comparison tools are not available or when automation is required.</p>



<h2 class="wp-block-heading">Creating a DACPAC</h2>



<p class="">To compare database schemas using <code>sqlpackage</code>, you first need a <strong>DACPAC</strong> file, which represents the database schema.</p>



<p class="">You can create a DACPAC using <strong>sqlpackage.exe</strong>, <strong>SSMS</strong>, or <strong>Visual Studio</strong>. For a quick, step-by-step guide covering all methods, refer to this <a href="https://azureops.org/articles/dacpac-sql-server-database/?utm_source=chatgpt.com" target="_blank" rel="noreferrer noopener">article</a>.</p>



<h2 class="wp-block-heading">Installing <code>sqlpackage</code> Before You Begin</h2>



<p class="">Before you can compare two Azure SQL database schemas using <code>sqlpackage</code>, you need to <strong>install the <code>sqlpackage</code> command-line utility</strong> on your machine. <code>sqlpackage.exe</code> is the same tool that Powers the DACPAC deployments discussed in this site’s previous article on deploying DACPACs to Azure SQL Database.</p>



<p class="">Here are the recommended ways to install <code>sqlpackage</code>, depending on your environment:</p>



<h3 class="wp-block-heading">Option 1 — Install as a .NET Global Tool (Cross-Platform)</h3>



<p class="">The easiest and most modern way to install <code>sqlpackage</code> on <strong>Windows, macOS, or Linux</strong> is using the <strong>.NET SDK tool installer</strong>. This gives you the <code>sqlpackage</code> command directly on your PATH. Run below command in command prompt.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
dotnet tool install --global Microsoft.SqlPackage
</pre></div>


<p class="">If you already have it installed and want to update to the latest version, run:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
dotnet tool update --global Microsoft.SqlPackage
</pre></div>


<p class="">This method works well for local development and automation scripts, including PowerShell and CI/CD pipelines.</p>



<h3 class="wp-block-heading">Option 2 — Download Standalone Zip (Windows / macOS / Linux)</h3>



<p class="">If you don’t use the .NET SDK or prefer a <strong>self-contained download</strong>, Microsoft also publishes standalone builds of <code>sqlpackage</code>:</p>



<ol class="wp-block-list">
<li class="">Visit the official SqlPackage<a href="https://learn.microsoft.com/en-us/sql/tools/sqlpackage/sqlpackage-download?view=sql-server-ver17" target="_blank" rel="noreferrer noopener"> download page</a> on Microsoft Docs.</li>



<li class="">Download the appropriate zip for your OS.</li>



<li class="">Extract and place the folder somewhere on your system (e.g., <code>C:\tools\sqlpackage</code>).</li>



<li class="">Add the folder containing <code>sqlpackage.exe</code> to your system PATH so you can call it from any terminal.</li>
</ol>



<p class="">This method is useful if you want to avoid installing .NET tools or need to bundle <code>sqlpackage</code> with deployment scripts.</p>



<figure class="wp-block-image size-full is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2026/01/image.png?ssl=1"><img loading="lazy" decoding="async" width="1090" height="420" data-attachment-id="9206" data-permalink="https://azureops.org/articles/compare-azure-sql-database-schema-using-sqlpackage/image-46/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/01/image.png?fit=1090%2C420&amp;ssl=1" data-orig-size="1090,420" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/01/image.png?fit=300%2C116&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/01/image.png?fit=1090%2C420&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2026/01/image.png?fit=1090%2C420&amp;ssl=1" alt="compare Azure SQL Database Schema" class="wp-image-9206" style="width:809px;height:auto" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2026/01/image.png?w=1090&amp;ssl=1 1090w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/01/image.png?resize=300%2C116&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/01/image.png?resize=768%2C296&amp;ssl=1 768w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/01/image.png?resize=450%2C173&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/01/image.png?resize=600%2C231&amp;ssl=1 600w" sizes="auto, (max-width: 1090px) 100vw, 1090px" /></a></figure>



<h2 class="wp-block-heading">High-level approach</h2>



<p class="">The comparison process consists of three simple steps:</p>



<ol class="wp-block-list">
<li class="">Export both Azure SQL databases to DACPAC files</li>



<li class="">Use <code>sqlpackage.exe</code> with <code>/Action:Script</code></li>



<li class="">Review the generated delta script before applying it</li>
</ol>



<p class="">In this article, we focus on <strong>step 2</strong>, assuming you already have DACPAC files for both databases.</p>



<h2 class="wp-block-heading">Sample scenario</h2>



<p class="">Let us assume the following setup:</p>



<ul class="wp-block-list">
<li class=""><strong>Source (baseline)</strong> database: <code>sales-test-db</code></li>



<li class=""><strong>Target (to be aligned)</strong> database: <code>sales-prod-db</code></li>
</ul>



<p class="">Our goal is to compare Azure SQL Database schema and generate a SQL script that shows what changes are required to make <strong>Production</strong> match <strong>Test</strong>.</p>



<h2 class="wp-block-heading">Sample sqlpackage command</h2>



<p class="">Below is a sample <code>sqlpackage.exe</code> command to compare two DACPAC files and generate a delta script.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
sqlpackage.exe ^
  /Action:Script ^
  /SourceFile:&quot;C:\Dacpacs\sales-test-db.dacpac&quot; ^
  /TargetFile:&quot;C:\Dacpacs\sales-prod-db.dacpac&quot; ^
  /TargetDatabaseName:&quot;sales-prod-db&quot; ^
  /OutputPath:&quot;C:\Dacpacs\sales_test_vs_prod_delta.sql&quot; ^
  /p:DropObjectsNotInSource=True

</pre></div>


<figure class="wp-block-image size-full is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2026/01/sqlpackage-to-compare-azure-sql-database-schema.png?ssl=1"><img loading="lazy" decoding="async" width="1153" height="221" data-attachment-id="9192" data-permalink="https://azureops.org/articles/compare-azure-sql-database-schema-using-sqlpackage/sqlpackage-to-compare-azure-sql-database-schema/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/01/sqlpackage-to-compare-azure-sql-database-schema.png?fit=1153%2C221&amp;ssl=1" data-orig-size="1153,221" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="sqlpackage to compare azure sql database schema" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/01/sqlpackage-to-compare-azure-sql-database-schema.png?fit=300%2C58&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2026/01/sqlpackage-to-compare-azure-sql-database-schema.png?fit=1153%2C221&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2026/01/sqlpackage-to-compare-azure-sql-database-schema.png?fit=1153%2C221&amp;ssl=1" alt="compare Azure SQL Database Schema using sqlpackage utility" class="wp-image-9192" style="aspect-ratio:5.217492752598458;width:881px;height:auto" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2026/01/sqlpackage-to-compare-azure-sql-database-schema.png?w=1153&amp;ssl=1 1153w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/01/sqlpackage-to-compare-azure-sql-database-schema.png?resize=300%2C58&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/01/sqlpackage-to-compare-azure-sql-database-schema.png?resize=768%2C147&amp;ssl=1 768w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/01/sqlpackage-to-compare-azure-sql-database-schema.png?resize=450%2C86&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2026/01/sqlpackage-to-compare-azure-sql-database-schema.png?resize=600%2C115&amp;ssl=1 600w" sizes="auto, (max-width: 1153px) 100vw, 1153px" /></a></figure>



<p class="">In case you want to use PowerShell ISE, you can use below script.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: powershell; title: ; notranslate">
# Path to sqlpackage.exe
$sqlPackagePath = &quot;C:\Program Files\Microsoft SQL Server\160\DAC\bin\sqlpackage.exe&quot;

# DACPAC paths
$SourceDacpacPath = &quot;C:\Dacpacs\sales-test-db.dacpac&quot;
$TargetDacpacPath = &quot;C:\Dacpacs\sales-prod-db.dacpac&quot;

# Target database name
$TargetDatabaseName = &quot;sales-prod-db&quot;

# Output script path
$OutputScriptPath = &quot;C:\Dacpacs\sales_test_vs_prod_delta.sql&quot;

# Publish options
$DropObjectsNotInSource = &quot;True&quot;

# Execute sqlpackage
&amp; $sqlPackagePath `
    /Action:Script `
    /SourceFile:$SourceDacpacPath `
    /TargetFile:$TargetDacpacPath `
    /TargetDatabaseName:$TargetDatabaseName `
    /OutputPath:$OutputScriptPath `
    /p:DropObjectsNotInSource=$DropObjectsNotInSource

</pre></div>


<p class="">This command does <strong>not</strong> apply any changes. It only generates a SQL script that you can review and execute manually if needed.</p>



<h2 class="wp-block-heading">Understanding each parameter</h2>



<p class="">Let us break down all the parameters used in the command.</p>



<p class=""><strong>/Action:Script</strong></p>



<p class="">Specifies that <code>sqlpackage</code> should <strong>generate a deployment script</strong> instead of publishing changes directly to a database. This is the safest option when comparing environments like Test and Production.</p>



<p class=""><strong>/SourceFile</strong></p>



<p class="">Path to the <strong>source DACPAC</strong> file. This represents the <em>desired state</em> of the database.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; gutter: false; title: ; notranslate">
/SourceFile:&quot;C:\Dacpacs\sales-test-db.dacpac&quot;
</pre></div>


<p class="">In our example, the Test database schema is treated as the source of truth.</p>



<p class=""><strong>/TargetFile</strong></p>



<p class="">Path to the <strong>target DACPAC</strong> file. This represents the database you want to compare against.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; gutter: false; title: ; notranslate">
/TargetFile:&quot;C:\Dacpacs\sales-prod-db.dacpac&quot;
</pre></div>


<p class="">The generated script will contain changes required to make the target match the source.</p>



<p class=""><strong>/TargetDatabaseName</strong></p>



<p class="">Logical name of the target database.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; gutter: false; title: ; notranslate">
/TargetDatabaseName:&quot;sales-prod-db&quot;
</pre></div>


<p class="">This parameter is mandatory for the <code>Script</code> action, even when you are comparing DACPAC-to-DACPAC.</p>



<p class=""><strong>/OutputPath</strong></p>



<p class="">Specifies where the generated delta script should be written.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; gutter: false; title: ; notranslate">
/OutputPath:&quot;C:\Dacpacs\sales_test_vs_prod_delta.sql&quot;
</pre></div>


<p class="">Always review this script carefully before executing it in Production.</p>



<p class=""><strong>/p:DropObjectsNotInSource</strong></p>



<p class="">Controls whether objects that exist in the target but not in the source should be dropped.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; gutter: false; title: ; notranslate">
/p:DropObjectsNotInSource=True
</pre></div>


<ul class="wp-block-list">
<li class=""><code>True</code> – Generates <code>DROP</code> statements for extra objects in the target</li>



<li class=""><code>False</code> – Preserves objects that exist only in the target</li>
</ul>



<p class="">⚠️ <strong>Use this option with caution</strong>, especially for Production databases.</p>



<h2 class="wp-block-heading">Common additional publish parameters</h2>



<p class="">Depending on your requirements, you may also consider these commonly used parameters:</p>



<ul class="wp-block-list">
<li class=""><code>/p:BlockOnPossibleDataLoss=False</code></li>



<li class=""><code>/p:IgnorePermissions=True</code></li>



<li class=""><code>/p:IgnoreRoleMembership=True</code></li>



<li class=""><code>/p:ExcludeObjectTypes=Users;Logins</code></li>



<li class=""><code>/p:ExcludeSchemaValidation=True</code></li>
</ul>



<p class="">These options help fine-tune the comparison and avoid unwanted differences.</p>



<h2 class="wp-block-heading">Best practices</h2>



<ul class="wp-block-list">
<li class="">Always generate a script first (<code>/Action:Script</code>)</li>



<li class="">Review the delta script line by line</li>



<li class="">Never auto-apply changes to Production without validation</li>



<li class="">Store DACPACs and scripts in source control</li>



<li class="">Use the same approach in CI/CD pipelines for consistency</li>
</ul>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="">Comparing two Azure SQL databases using <code>sqlpackage.exe</code> is a reliable and automation-friendly approach. By working with DACPAC files and generating delta scripts, you gain full visibility and control over schema changes before they reach Production.</p>



<p class="">This method fits well into modern DevOps workflows and provides a safe alternative to manual or GUI-based comparisons.</p>



<p class="">If you regularly manage schema changes across multiple environments, <code>sqlpackage</code> should be a core part of your database deployment tool.</p>



<p class="has-light-green-cyan-background-color has-background"><strong>Pro tips</strong><br>1. If you want to generate BACPAC file of an Azure SQL database, you can refer to this <a href="https://azureops.org/articles/bacpac-large-sql-server-database/" target="_blank" rel="noreferrer noopener">post</a></p>



<h2 class="wp-block-heading">See more</h2>



<iframe loading="lazy" width="700" height="394" src="https://www.youtube.com/embed/8YVrxCgdiIg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>The post <a href="https://azureops.org/articles/compare-azure-sql-database-schema-using-sqlpackage/">Compare Azure SQL Database Schema Using sqlpackage</a> appeared first on <a href="https://azureops.org">AzureOps</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">9188</post-id>	</item>
		<item>
		<title>SSRS Migration Case Study: Migrating SSRS Reports in a Disconnected Environment</title>
		<link>https://azureops.org/articles/ssrs-migration-case-study-migrating-ssrs-reports-in-a-disconnected-environment/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 28 Dec 2025 07:01:29 +0000</pubDate>
				<category><![CDATA[Microsoft BI]]></category>
		<category><![CDATA[SSRS]]></category>
		<guid isPermaLink="false">https://azureops.org/?p=9160</guid>

					<description><![CDATA[<p>Migrating SQL Server Reporting Services (SSRS) reports to AWS can be challenging, especially when the source and target environments are disconnected or air-gapped. Many organizations operate in secure environments where direct network connectivity between on-premises systems and AWS is not allowed. In this case study, we examine how Leidos, USA&#160;, completed an AWS SSRS migration [&#8230;]</p>
<p>The post <a href="https://azureops.org/articles/ssrs-migration-case-study-migrating-ssrs-reports-in-a-disconnected-environment/">SSRS Migration Case Study: Migrating SSRS Reports in a Disconnected Environment</a> appeared first on <a href="https://azureops.org">AzureOps</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="">Migrating <strong>SQL Server Reporting Services (SSRS) reports to AWS</strong> can be challenging, especially when the source and target environments are <strong>disconnected or air-gapped</strong>. Many organizations operate in secure environments where <strong>direct network connectivity between on-premises systems and AWS is not allowed</strong>.</p>



<p class="">In this case study, we examine how Leidos, USA&nbsp;, <strong>completed an AWS SSRS migration</strong> involving more than <strong>80+ SSRS reports</strong>, despite having <strong>no connectivity between the source SSRS server and the AWS environment</strong>.</p>



<h2 class="wp-block-heading">Background: AWS SSRS Migration with Network Isolation</h2>



<p class="">Leidos was modernizing its infrastructure by moving workloads from an <strong>on-premises data center to AWS</strong>. Their legacy SSRS server (Windows Server 2016) was scheduled for decommissioning.</p>



<p class="">Over the years, the server had accumulated:</p>



<ul class="wp-block-list">
<li class="">80+ SSRS reports</li>



<li class="">Deep folder hierarchies</li>



<li class="">Shared data sources</li>
</ul>



<p class="">Due to security policies, the <strong>on-prem SSRS environment and AWS were completely disconnected</strong>, making a traditional SSRS migration approach impossible.</p>



<p class="">This made the project a textbook example of a <strong>disconnected SSRS migration</strong>.</p>



<h2 class="wp-block-heading">Key Challenges in Disconnected SSRS Migration</h2>



<ul class="wp-block-list">
<li class="">No direct network access between on-prem SSRS and AWS</li>



<li class="">Inability to use live source-to-target SSRS migration</li>



<li class="">Risk of missing reports, folders, or shared data sources</li>



<li class="">Manual redeployment not feasible for large SSRS estates</li>



<li class="">Need for a safe backup before decommissioning</li>
</ul>



<h2 class="wp-block-heading">Solution: File-Based SSRS Migration to AWS</h2>



<p class="">To address these challenges, Leidos used <a href="https://ssrsmigrationwizard.azureops.org/">SSRS Reports Migration Wizard</a> in <strong>Standalone Mode</strong>, leveraging its <strong>offline / file-based SSRS migration capability</strong>.</p>



<p class="">This approach is ideal for:</p>



<ul class="wp-block-list">
<li class=""><strong>AWS SSRS migration</strong></li>



<li class=""><strong>Air-gapped or disconnected SSRS environments</strong></li>



<li class="">Secure enterprise networks</li>
</ul>



<h2 class="wp-block-heading">AWS SSRS Migration Process (Step-by-Step)</h2>



<h3 class="wp-block-heading">Step 1: Export SSRS Reports from On-Prem Server</h3>



<p class="">On the source SSRS server, the tool:</p>



<ul class="wp-block-list">
<li class="">Automatically discovered <strong>reports, folders, and shared data sources</strong>, <strong>subscriptions, roles etc.</strong></li>



<li class="">Displayed the full SSRS hierarchy for validation</li>



<li class="">Exported all selected items into a <strong>single migration file</strong></li>
</ul>



<p class="">During export:</p>



<ul class="wp-block-list">
<li class="">Individual <strong>.rdl files</strong> were generated for each SSRS report</li>



<li class="">Folder structure and metadata were preserved</li>
</ul>



<p class="">This created a <strong>complete offline SSRS backup</strong>, a key requirement in regulated environments.</p>



<h3 class="wp-block-heading">Step 2: Transfer Migration File to AWS (Disconnected Network)</h3>



<p class="">Since the environments were disconnected:</p>



<ul class="wp-block-list">
<li class="">The migration file was securely transferred using approved methods</li>



<li class="">No firewall changes or temporary network access were required</li>
</ul>



<p class="">This step highlights the core benefit of <strong>disconnected SSRS migration to AWS</strong>.</p>



<h3 class="wp-block-heading">Step 3: Import SSRS Reports into AWS Environment</h3>



<p class="">On the AWS-hosted SSRS server:</p>



<ul class="wp-block-list">
<li class="">The migration file was imported</li>



<li class="">Folder hierarchy and shared resources were recreated</li>



<li class="">Data source connections were updated for AWS databases</li>
</ul>



<p class="">After import, all SSRS reports were available for validation.</p>



<h2 class="wp-block-heading">AWS SSRS Migration Results</h2>



<ul class="wp-block-list">
<li class="">80+ SSRS reports successfully migrated to AWS</li>



<li class="">No network connectivity required between environments</li>



<li class="">Folder hierarchy and report dependencies preserved</li>



<li class="">Minimal downtime</li>



<li class="">No manual report recreation</li>
</ul>



<p class="">The migration was completed smoothly despite being a <strong>fully disconnected SSRS migration</strong>.</p>



<h2 class="wp-block-heading">Additional Benefit: SSRS Backup and Disaster Recovery</h2>



<p class="">An unexpected advantage of the file-based approach was backup:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class=""><em>“The tool creates .rdl files for each report… making it an easy way to back up SSRS reports, data sources, and folders.”</em></p>
</blockquote>



<p class="">This makes the solution useful not only for <strong>AWS SSRS migration</strong>, but also for:</p>



<ul class="wp-block-list">
<li class="">SSRS backup</li>



<li class="">Disaster recovery</li>



<li class="">Compliance and audit scenarios</li>
</ul>



<h2 class="wp-block-heading">Why This Approach Works for AWS SSRS Migration</h2>



<ul class="wp-block-list">
<li class="">Designed for <strong>disconnected and air-gapped networks</strong></li>



<li class="">Supports <strong>offline SSRS migration to AWS</strong></li>



<li class="">Preserves full SSRS hierarchy</li>



<li class="">Generates reusable .rdl files</li>



<li class="">Suitable for enterprise security requirements</li>
</ul>



<p class="">Read full customer testimonial on the <a href="https://marketplace.visualstudio.com/items?itemName=AzureOps.srmw2022&amp;ssr=false#review-details" target="_blank" rel="noreferrer noopener">Visual Studio Marketplace</a>.</p>



<h2 class="wp-block-heading">Watch a quick demo</h2>



<iframe loading="lazy" width="700" height="394" src="https://www.youtube.com/embed/U-U-PAzOLP4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>The post <a href="https://azureops.org/articles/ssrs-migration-case-study-migrating-ssrs-reports-in-a-disconnected-environment/">SSRS Migration Case Study: Migrating SSRS Reports in a Disconnected Environment</a> appeared first on <a href="https://azureops.org">AzureOps</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">9160</post-id>	</item>
		<item>
		<title>Cross Database Query in Azure SQL Database</title>
		<link>https://azureops.org/articles/cross-database-query-in-azure-sql/</link>
		
		<dc:creator><![CDATA[Kunal Rathi]]></dc:creator>
		<pubDate>Wed, 05 Nov 2025 16:25:27 +0000</pubDate>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[SQL Database]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[cross database access in azure sql]]></category>
		<category><![CDATA[elastic query in azure sql]]></category>
		<guid isPermaLink="false">https://azureops.org/?p=8505</guid>

					<description><![CDATA[<p>In modern cloud architectures, it&#8217;s common to distribute data across multiple Azure SQL Databases. While this promotes modularity and scalability, it can pose challenges when you need to access data across these databases. Fortunately, Azure SQL&#8217;s external tables feature allows for seamless cross-database querying without data duplication. This feature is also known as Elastic Query [&#8230;]</p>
<p>The post <a href="https://azureops.org/articles/cross-database-query-in-azure-sql/">Cross Database Query in Azure SQL Database</a> appeared first on <a href="https://azureops.org">AzureOps</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>In modern cloud architectures, it&#8217;s common to distribute data across multiple Azure SQL Databases. While this promotes modularity and scalability, it can pose challenges when you need to access data across these databases. Fortunately, Azure SQL&#8217;s external tables feature allows for seamless cross-database querying without data duplication. This feature is also known as <a href="https://learn.microsoft.com/en-us/azure/azure-sql/database/elastic-query-overview?view=azuresql" target="_blank" rel="noreferrer noopener">Elastic Query</a> in Azure SQL database.This guide walks you through setting up cross database query in Azure SQL to reference a table from another Azure SQL Database, ensuring secure and efficient data access.</p>



<h3 class="wp-block-heading">Use Case &#8211; Imagine this scenario:</h3>



<ul class="wp-block-list">
<li>You have a <strong>main transactional database</strong> named <code>app-db</code> hosted on Azure SQL Server <code>app-db.database.windows.net</code>.</li>



<li>You also have a <strong>reference or lookup database</strong> named <code>source-db</code>, hosted on a separate Azure SQL Server: <code>source-server.database.windows.net</code>.</li>
</ul>



<figure class="wp-block-image size-full is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/Elastic-query-access-in-Azure-SQL-database-1.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1536" height="1024" data-attachment-id="8572" data-permalink="https://azureops.org/articles/cross-database-query-in-azure-sql/elastic-query-access-in-azure-sql-database-2/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/Elastic-query-access-in-Azure-SQL-database-1.png?fit=1536%2C1024&amp;ssl=1" data-orig-size="1536,1024" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Elastic query access in Azure SQL database" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/Elastic-query-access-in-Azure-SQL-database-1.png?fit=300%2C200&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/Elastic-query-access-in-Azure-SQL-database-1.png?fit=1200%2C800&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/Elastic-query-access-in-Azure-SQL-database-1.png?resize=1536%2C1024&#038;ssl=1" alt="Cross database query in Azure SQL database" class="wp-image-8572" style="width:616px;height:auto" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/Elastic-query-access-in-Azure-SQL-database-1.png?w=1536&amp;ssl=1 1536w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/Elastic-query-access-in-Azure-SQL-database-1.png?resize=300%2C200&amp;ssl=1 300w" sizes="auto, (max-width: 1536px) 100vw, 1536px" /></a></figure>



<p>You want your <code>app-db</code> to query the table <code>dbo.external_table</code> from the <code>source-db</code> — without importing or copying the data. The goal is to enable live, read-only access to shared reference data across databases in a secure and manageable way.</p>



<p class="has-pale-cyan-blue-background-color has-background"><strong>Prerequisites</strong><br>Before diving into the setup, ensure the following:<br><strong>1. Azure SQL Databases</strong>: Both the source and target databases should be Azure SQL Databases.<br><strong>2. Same Region</strong>: Ensure both databases are in the same Azure region to minimize latency.<br><strong>3. User Credentials</strong>: A SQL user say (<code>ext_table_user</code>) must exist in the source database with the necessary permissions to access the target table.</p>



<h3 class="wp-block-heading">Why Create Separate user in the Source Database?</h3>



<p>The <code>ext_table_user</code> is a SQL user in the source database that the target database uses to authenticate and access data. This user must have the necessary permissions (e.g., <code>SELECT</code>) on the target table.</p>



<p>Creating a dedicated user for external access enhances security by allowing you to:</p>



<ul class="wp-block-list">
<li><strong>Limit Permissions</strong>: Grant only the necessary permissions to this user.</li>



<li><strong>Monitor Access</strong>: Track and audit activities performed by this user.</li>



<li><strong>Revoke Access Easily</strong>: If needed, you can revoke this user&#8217;s access without affecting other users.</li>
</ul>



<p>Fow these <a href="https://azureops.org/articles/grant-access-to-azure-sql-database/" target="_blank" rel="noreferrer noopener">steps </a>to how to grant access to Azure SQL database. </p>



<h2 class="wp-block-heading">How to Setup Cross Database Access in Azure SQL</h2>



<p>Follow the below quick steps to setup cross database access in Azure SQL database.</p>



<h3 class="wp-block-heading">Step 1: Create a Master Key in the Target Database</h3>



<p>The master key is essential for encrypting credentials used in external data sources.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; gutter: false; title: ; notranslate">
-- Execute in the target database

CREATE MASTER KEY ENCRYPTION BY PASSWORD = &#039;YourStrongPasswordHere&#039;;
</pre></div>


<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Skip this if <code>SELECT * FROM sys.symmetric_keys WHERE name = '##MS_DatabaseMasterKey##'</code> already returns a row.</p>
</blockquote>



<h3 class="wp-block-heading">Step 2: Create a Database Scoped Credential</h3>



<p>This credential will be used to authenticate against the source database.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; gutter: false; title: ; notranslate">
-- Execute in the target database

CREATE DATABASE SCOPED CREDENTIAL ext_table_user
WITH IDENTITY = &#039;ext_table_user&#039;,
     SECRET = &#039;ActualPasswordOfExtTableUser&#039;;
</pre></div>


<figure class="is-style-default wp-block-image size-large is-resized"><a href="https://marketplace.visualstudio.com/items?itemName=AzureOps.ssiscatalogerpro&amp;ssr=false#overview" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1200" height="148" data-attachment-id="4839" data-permalink="https://azureops.org/articles/azure-data-studio-for-sql-developers/scmw-horizontal-ad/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?fit=1326%2C163&amp;ssl=1" data-orig-size="1326,163" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="SCMW-horizontal-ad" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?fit=300%2C37&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?fit=1200%2C148&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?resize=1200%2C148&#038;ssl=1" alt="" class="wp-image-4839" style="object-fit:cover;width:811px;height:99px" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?resize=1200%2C148&amp;ssl=1 1200w, https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?resize=450%2C55&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?resize=600%2C74&amp;ssl=1 600w, https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?resize=300%2C37&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?resize=768%2C94&amp;ssl=1 768w, https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?w=1326&amp;ssl=1 1326w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></a></figure>



<h3 class="wp-block-heading">Step 3: Define the External Data Source</h3>



<p>This step establishes a connection to the source database.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; gutter: false; title: ; notranslate">
-- Execute in the target database

CREATE EXTERNAL DATA SOURCE LinkedAzureSQLDB
WITH (
    TYPE = RDBMS,
    LOCATION = &#039;source-server.database.windows.net&#039;,
    DATABASE_NAME = &#039;source-db&#039;,
    CREDENTIAL = ext_table_user
);
</pre></div>


<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>Ensure</em>: Replace <code>'source-server.database.windows.net'</code> and <code>'source-db'</code> with your actual server and database names.</p>
</blockquote>



<h3 class="wp-block-heading">Step 4: Create the External Table</h3>



<p>Now, define the external table in the target database to reference the table in the source database.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; gutter: false; title: ; notranslate">
-- Execute in the target database

CREATE EXTERNAL TABLE dbo.external_table (
    &#x5B;ID] NUMERIC(18, 0) NOT NULL,
    &#x5B;list_id] INT NOT NULL,
    &#x5B;type_id] INT NOT NULL,
    &#x5B;description] VARCHAR(50) NULL
)
WITH (
    DATA_SOURCE = LinkedAzureSQLDB,
    SCHEMA_NAME = &#039;dbo&#039;,
    OBJECT_NAME = &#039;external_table&#039;
);
</pre></div>


<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>Note</em>: The schema and object names should match those in the source database.</p>
</blockquote>



<h3 class="wp-block-heading">Step 5: Query the External Table</h3>



<p>With the setup complete, you can now query the external table as if it were local:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; gutter: false; title: ; notranslate">
-- Execute in the target database

SELECT TOP 10 * FROM dbo.external_table;
</pre></div>


<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>Performance Tip</em>: Monitor query performance, as cross-database queries may have higher latency.</p>
</blockquote>



<p class="has-background" style="background-color:#bcefca"><strong>Pro tips:</strong><br><strong>1. Use Managed Identities</strong>: For enhanced security, consider using Azure Managed Identities instead of SQL authentication.<br>2. <strong>Monitor Performance</strong>: Regularly monitor the performance of cross-database queries to ensure they meet your application&#8217;s requirements.<br>3. <strong>Secure Credentials</strong>: Store sensitive information, like passwords, securely using Azure Key Vault.<br>4. <strong>Elastic query</strong> feature in Azure SQL is still in preview.</p>



<p>By following this guide, you can efficiently set up cross databse query in Azure SQL, enabling seamless cross-database querying while maintaining security and performance.</p>



<h2 class="wp-block-heading">See more</h2>



<iframe loading="lazy" width="700" height="394" src="https://www.youtube.com/embed/8YVrxCgdiIg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>The post <a href="https://azureops.org/articles/cross-database-query-in-azure-sql/">Cross Database Query in Azure SQL Database</a> appeared first on <a href="https://azureops.org">AzureOps</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8505</post-id>	</item>
		<item>
		<title>SSMS 21 Copilot: Here&#8217;s How It Works</title>
		<link>https://azureops.org/articles/ssms-21-copilot/</link>
		
		<dc:creator><![CDATA[Kunal Rathi]]></dc:creator>
		<pubDate>Sat, 11 Oct 2025 08:59:10 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Microsoft Copilot]]></category>
		<category><![CDATA[SQL Database]]></category>
		<category><![CDATA[SSMS]]></category>
		<category><![CDATA[SSMS with Copilot]]></category>
		<guid isPermaLink="false">https://azureops.org/?p=8592</guid>

					<description><![CDATA[<p>SQL Server Management Studio (SSMS) version 21 introduces native Copilot integration, enhancing SQL development. Users can connect to Azure OpenAI for efficient query generation and debugging in read-only mode. Copilot aids in writing, fixing, and optimizing SQL queries without executing modifications, ensuring control and security over data.</p>
<p>The post <a href="https://azureops.org/articles/ssms-21-copilot/">SSMS 21 Copilot: Here&#8217;s How It Works</a> appeared first on <a href="https://azureops.org">AzureOps</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="">SQL Server Management Studio (SSMS) has been a staple for database professionals for years. With version 21, Microsoft has added something many users have been waiting for: <strong>native Copilot integration</strong>. No extensions, no hacks—just open it up, connect to Azure, and start working smarter. Here’s a walkthrough of the most important features SSMS 21 Copilot offers and how they work in practice.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class=""><em>You write the query, run it, catch a missing condition, tweak the join, test again—repeat until it’s right. SSMS 21 brings Copilot into that loop. </em></p>
</blockquote>



<h2 class="wp-block-heading"><strong>TL;DR:</strong></h2>



<ul class="wp-block-list">
<li class="">SSMS 21 now includes <strong>built-in Copilot</strong>—no extensions. Just require connection to your <strong>Azure OpenAI deployment</strong> (like GPT-4o).</li>



<li class="">Works only with <strong>SQL Server connections</strong> (not SSIS, SSAS, or SSRS).</li>



<li class="">Runs in <strong>read-only mode</strong>—won’t execute any DML or modify data.</li>



<li class="">Can <strong>generate queries</strong>, fix broken SQL, and suggest optimizations.</li>



<li class="">Supports prompts like: “fix this query,” “optimize for performance,” or “generate insert script.”</li>



<li class="">Ideal for SQL developers who want help writing, debugging, or learning better query patterns—without giving up control.</li>
</ul>



<h2 class="wp-block-heading">Installation: Copilot Comes Built-in</h2>



<p class="">The installer for <a href="https://learn.microsoft.com/en-us/ssms/install/install" target="_blank" rel="noreferrer noopener">SSMS 21</a> clearly shows that Copilot is not an afterthought—it’s front and center. Once you launch the installer, you&#8217;ll notice the <strong>&#8220;Copilot Integration&#8221;</strong> checkbox enabled by default. This means no manual setup is required post-install. It&#8217;s part of the core experience now.</p>



<figure class="wp-block-image size-large is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/SSMS-21-installation-with-copilot.png?ssl=1"><img loading="lazy" decoding="async" width="1258" height="705" data-attachment-id="8595" data-permalink="https://azureops.org/articles/ssms-21-copilot/ssms-21-installation-with-copilot/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/SSMS-21-installation-with-copilot.png?fit=1258%2C705&amp;ssl=1" data-orig-size="1258,705" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="SSMS 21 installation with copilot" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/SSMS-21-installation-with-copilot.png?fit=300%2C168&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/SSMS-21-installation-with-copilot.png?fit=1200%2C672&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/SSMS-21-installation-with-copilot.png?fit=1200%2C672&amp;ssl=1" alt="ssms 21 copilot installation" class="wp-image-8595" style="width:793px;height:auto" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/SSMS-21-installation-with-copilot.png?w=1258&amp;ssl=1 1258w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/SSMS-21-installation-with-copilot.png?resize=300%2C168&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/SSMS-21-installation-with-copilot.png?resize=1200%2C672&amp;ssl=1 1200w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/SSMS-21-installation-with-copilot.png?resize=1106%2C620&amp;ssl=1 1106w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/SSMS-21-installation-with-copilot.png?resize=768%2C430&amp;ssl=1 768w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/SSMS-21-installation-with-copilot.png?resize=450%2C252&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/SSMS-21-installation-with-copilot.png?resize=600%2C336&amp;ssl=1 600w" sizes="auto, (max-width: 1258px) 100vw, 1258px" /></a></figure>



<h3 class="wp-block-heading">First Run: Setting Up Your Azure OpenAI Keys</h3>



<p class="">Once SSMS launches, you’ll be prompted to connect Copilot to your <strong>Azure OpenAI</strong> setup.</p>



<figure class="wp-block-image size-full is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/enter-open-ai-service-key.png?ssl=1"><img loading="lazy" decoding="async" width="1086" height="778" data-attachment-id="8596" data-permalink="https://azureops.org/articles/ssms-21-copilot/enter-open-ai-service-key/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/enter-open-ai-service-key.png?fit=1086%2C778&amp;ssl=1" data-orig-size="1086,778" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="enter open ai service key" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/enter-open-ai-service-key.png?fit=300%2C215&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/enter-open-ai-service-key.png?fit=1086%2C778&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/enter-open-ai-service-key.png?fit=1086%2C778&amp;ssl=1" alt="ssms 21 copilot installation - seeting up openai details" class="wp-image-8596" style="width:718px;height:auto" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/enter-open-ai-service-key.png?w=1086&amp;ssl=1 1086w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/enter-open-ai-service-key.png?resize=300%2C215&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/enter-open-ai-service-key.png?resize=865%2C620&amp;ssl=1 865w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/enter-open-ai-service-key.png?resize=768%2C550&amp;ssl=1 768w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/enter-open-ai-service-key.png?resize=450%2C322&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/enter-open-ai-service-key.png?resize=600%2C430&amp;ssl=1 600w" sizes="auto, (max-width: 1086px) 100vw, 1086px" /></a></figure>



<p class="">In the first prompt, you’ll be asked to provide:</p>



<ul class="wp-block-list">
<li class="">Azure OpenAI service endpoint</li>



<li class="">Azure OpenAI deployment</li>



<li class="">Azure OpenAI API key</li>
</ul>



<p class="">If you haven’t already created this in Azure, it’s a quick process: deploy a model, generate a key, and you’re good to go. we see how this information is pasted into SSMS.</p>



<p class="">It’s a one-time step, and once entered, Copilot starts responding instantly within SSMS.</p>



<figure class="wp-block-image size-full is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/keys-and-endpoint-2.png?ssl=1"><img loading="lazy" decoding="async" width="996" height="523" data-attachment-id="8601" data-permalink="https://azureops.org/articles/ssms-21-copilot/keys-and-endpoint-3/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/keys-and-endpoint-2.png?fit=996%2C523&amp;ssl=1" data-orig-size="996,523" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="keys and endpoint" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/keys-and-endpoint-2.png?fit=300%2C158&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/keys-and-endpoint-2.png?fit=996%2C523&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/keys-and-endpoint-2.png?fit=996%2C523&amp;ssl=1" alt="Create open ai service and get openai endpoint and key." class="wp-image-8601" style="width:802px;height:auto" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/keys-and-endpoint-2.png?w=996&amp;ssl=1 996w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/keys-and-endpoint-2.png?resize=300%2C158&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/keys-and-endpoint-2.png?resize=768%2C403&amp;ssl=1 768w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/keys-and-endpoint-2.png?resize=450%2C236&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/keys-and-endpoint-2.png?resize=600%2C315&amp;ssl=1 600w" sizes="auto, (max-width: 996px) 100vw, 996px" /></a></figure>



<p class="">To get an Azure <strong>OpenAI deployment </strong>name for SSMS Copilit, we need Gen AI model. That’s the engine powering your Copilot. GPT-4o is optimized for speed and real-time interaction, making it well-suited for something as dynamic as SQL writing and analysis.</p>



<p class="">If you already use GPT-based models in Azure, you can reuse the same deployment. If not, create a new one and pick GPT-4o or other depending on availability.</p>



<h2 class="wp-block-heading">Which Connections Are Supported?</h2>



<p class="">As of now, <strong>Copilot in SSMS works only with SQL Server connections</strong>—whether it&#8217;s a local database or Azure SQL.</p>



<p class="">It does <strong>not</strong> support:</p>



<ul class="wp-block-list">
<li class="">SQL Server Integration Services (SSIS)</li>



<li class="">SQL Server Analysis Services (SSAS)</li>



<li class="">SQL Server Reporting Services (SSRS)</li>
</ul>



<p class="">So if you’re connected to an SSIS or SSAS instance, you won’t see Copilot suggestions. It’s focused purely on <strong>Transact-SQL (T-SQL)</strong> scenarios for now.</p>



<h3 class="wp-block-heading">Read-Only Mode – No Live Data Changes</h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class=""><em>Copilot works in a read-only mode inside SSMS</em> for GOOD.</p>
</blockquote>



<p class="">It will <strong>not execute updates, deletes, or any data-modifying queries</strong> on its own. It doesn’t have permissions to alter databases or run DML commands. You remain in full control.</p>



<p class="">That said, it <strong>can generate</strong> update, insert, and delete queries for you, which you can review, tweak, and run manually. This helps reduce the risk of accidental changes while still speeding up development.</p>



<h2 class="wp-block-heading">Quick Demo: Fixing a Broken Query</h2>



<p class="">I pasted a malformed SELECT query into SSMS. Copilot immediately offered a fix and even explained what was wrong.</p>



<figure class="wp-block-image size-large is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/Fix-SQL-Query-in-SSMS-using-copilot.png?ssl=1"><img loading="lazy" decoding="async" width="1332" height="277" data-attachment-id="8604" data-permalink="https://azureops.org/articles/ssms-21-copilot/fix-sql-query-in-ssms-using-copilot/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/Fix-SQL-Query-in-SSMS-using-copilot.png?fit=1332%2C277&amp;ssl=1" data-orig-size="1332,277" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Fix SQL Query in SSMS using copilot" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/Fix-SQL-Query-in-SSMS-using-copilot.png?fit=300%2C62&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/Fix-SQL-Query-in-SSMS-using-copilot.png?fit=1200%2C250&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/Fix-SQL-Query-in-SSMS-using-copilot.png?fit=1200%2C250&amp;ssl=1" alt="SSMS 21 Copilot" class="wp-image-8604" style="width:1023px;height:auto" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/Fix-SQL-Query-in-SSMS-using-copilot.png?w=1332&amp;ssl=1 1332w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/Fix-SQL-Query-in-SSMS-using-copilot.png?resize=300%2C62&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/Fix-SQL-Query-in-SSMS-using-copilot.png?resize=1200%2C250&amp;ssl=1 1200w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/Fix-SQL-Query-in-SSMS-using-copilot.png?resize=768%2C160&amp;ssl=1 768w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/Fix-SQL-Query-in-SSMS-using-copilot.png?resize=450%2C94&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/Fix-SQL-Query-in-SSMS-using-copilot.png?resize=600%2C125&amp;ssl=1 600w" sizes="auto, (max-width: 1332px) 100vw, 1332px" /></a></figure>



<h3 class="wp-block-heading">Few Prompt Examples: Result Accuracy</h3>



<p class="">In below example, we asked Copilot to generate a complex query involving filters, aggregates, and joins. The result was accurate and ready to run with minimal edits.</p>



<figure class="wp-block-image size-large is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/result-1.png?ssl=1"><img loading="lazy" decoding="async" width="1591" height="968" data-attachment-id="8607" data-permalink="https://azureops.org/articles/ssms-21-copilot/result-1/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/result-1.png?fit=1591%2C968&amp;ssl=1" data-orig-size="1591,968" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="result 1" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/result-1.png?fit=300%2C183&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/result-1.png?fit=1200%2C730&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/result-1.png?fit=1200%2C730&amp;ssl=1" alt="SSMS 21 Copilot" class="wp-image-8607" style="width:890px;height:auto" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/result-1.png?w=1591&amp;ssl=1 1591w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/result-1.png?resize=300%2C183&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/result-1.png?resize=1200%2C730&amp;ssl=1 1200w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/result-1.png?resize=1019%2C620&amp;ssl=1 1019w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/result-1.png?resize=768%2C467&amp;ssl=1 768w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/result-1.png?resize=1536%2C935&amp;ssl=1 1536w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/result-1.png?resize=450%2C274&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/result-1.png?resize=600%2C365&amp;ssl=1 600w" sizes="auto, (max-width: 1591px) 100vw, 1591px" /></a></figure>



<figure class="is-style-default wp-block-image size-large is-resized"><a href="https://marketplace.visualstudio.com/items?itemName=AzureOps.ssiscatalogerpro&amp;ssr=false#overview" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1200" height="148" data-attachment-id="4839" data-permalink="https://azureops.org/articles/azure-data-studio-for-sql-developers/scmw-horizontal-ad/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?fit=1326%2C163&amp;ssl=1" data-orig-size="1326,163" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="SCMW-horizontal-ad" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?fit=300%2C37&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?fit=1200%2C148&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?resize=1200%2C148&#038;ssl=1" alt="" class="wp-image-4839" style="object-fit:cover;width:811px;height:99px" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?resize=1200%2C148&amp;ssl=1 1200w, https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?resize=450%2C55&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?resize=600%2C74&amp;ssl=1 600w, https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?resize=300%2C37&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?resize=768%2C94&amp;ssl=1 768w, https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?w=1326&amp;ssl=1 1326w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></a></figure>



<p class=""> the same query was further optimized by Copilot after being prompted with: <em>&#8220;Make it efficient.&#8221;</em> It introduced indexing suggestions and added a <code>WITH (NOLOCK)</code> hint—something even experienced developers can forget.</p>



<p class="">In another example, we asked Copilot another question on a different query context (another database connection), and it just worked fine.</p>



<figure class="wp-block-image size-full is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/result-2.png?ssl=1"><img loading="lazy" decoding="async" width="674" height="275" data-attachment-id="8608" data-permalink="https://azureops.org/articles/ssms-21-copilot/result-2/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/result-2.png?fit=674%2C275&amp;ssl=1" data-orig-size="674,275" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="result 2" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/result-2.png?fit=300%2C122&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/result-2.png?fit=674%2C275&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/result-2.png?fit=674%2C275&amp;ssl=1" alt="SSMS 21 Copilot" class="wp-image-8608" style="width:575px;height:auto" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/result-2.png?w=674&amp;ssl=1 674w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/result-2.png?resize=300%2C122&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/result-2.png?resize=450%2C184&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/result-2.png?resize=600%2C245&amp;ssl=1 600w" sizes="auto, (max-width: 674px) 100vw, 674px" /></a></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class=""><em>These examples show that Copilot isn’t just copying boilerplate SQL—it understands context and best practices.</em></p>
</blockquote>



<h2 class="wp-block-heading">Should You Use This?</h2>



<p class="">If your daily work involves writing or reading SQL, then yes—this is probably the most useful update to SSMS in years.</p>



<p class="">Here’s what it helps with:</p>



<ul class="wp-block-list">
<li class="">Writing long queries faster</li>



<li class="">Understanding joins and filters</li>



<li class="">Fixing syntax issues</li>



<li class="">Learning better SQL patterns</li>



<li class="">Generating stored procedure templates</li>



<li class="">Drafting DML scripts (but not running them automatically)</li>
</ul>



<h2 class="wp-block-heading">What It Won’t Do (Yet)</h2>



<p class="">Let’s be clear:</p>



<ul class="wp-block-list">
<li class="">It won’t <strong>connect to SSIS/SSAS/SSRS</strong></li>



<li class="">It won’t <strong>execute anything that modifies data</strong></li>



<li class="">It won’t <strong>automatically run</strong> DDL/ DML code it suggests</li>
</ul>



<p class="">This is intentional, for safety and audit reasons. Think of it as a smart assistant—not a trigger-happy automation engine.</p>



<h2 class="wp-block-heading">A Note on Privacy and Control</h2>



<p class="">Copilot integrates directly with your Azure environment, so you control what it accesses and shares. It processes your prompts and data securely within your subscription. According to Microsoft, it doesn&#8217;t store any query logs outside your environment, which helps meet compliance requirements for enterprise users.</p>



<p class="">SSMS 21 doesn’t just add Copilot—it integrates it naturally into the flow of writing, editing, and reviewing SQL. It’s fast, context-aware, and doesn’t get in the way.</p>



<p class="has-background" style="background-color:#beefca"><strong>Pro tips:</strong><br>1. While it&#8217;s good to have Copilot like features in SSMS 21, it seems to have lost some very important features like Import Export Wizard for databases like Azure SQL.<br>2. <a href="https://azureops.org/articles/data-agent-in-microsoft-fabric-heres-how-it-works/" target="_blank" rel="noreferrer noopener">Learn</a> how to build data agent in Microsoft Fabric.</p>



<h2 class="wp-block-heading">See more</h2>



<iframe loading="lazy" width="700" height="394" src="https://www.youtube.com/embed/t2h6xNVFQkc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="is-style-fill wp-block-button"><a class="wp-block-button__link has-white-color has-blush-light-purple-gradient-background has-text-color has-background has-link-color wp-element-button" href="https://azureops.org/product/ssis-catalog-migration-wizard-pro/" target="_blank" rel="noreferrer noopener">Download Now</a></div>
</div>
<p>The post <a href="https://azureops.org/articles/ssms-21-copilot/">SSMS 21 Copilot: Here&#8217;s How It Works</a> appeared first on <a href="https://azureops.org">AzureOps</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8592</post-id>	</item>
		<item>
		<title>Connect Python Azure Function to Azure SQL Using Managed Identity</title>
		<link>https://azureops.org/articles/connect-python-azure-function-to-azure-sql-using-managed-identity/</link>
		
		<dc:creator><![CDATA[Kunal Rathi]]></dc:creator>
		<pubDate>Thu, 18 Sep 2025 18:21:20 +0000</pubDate>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Function]]></category>
		<category><![CDATA[Managed Identity]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://azureops.org/?p=8874</guid>

					<description><![CDATA[<p>An Azure Function is a lightweight, serverless compute option in Azure that lets you execute small chunks of code in response to events or schedules without managing servers. When connecting Azure Functions to Azure SQL Database, you need a secure way to authenticate without storing credentials. That’s where Managed Identity steps in. Managed Identity allows [&#8230;]</p>
<p>The post <a href="https://azureops.org/articles/connect-python-azure-function-to-azure-sql-using-managed-identity/">Connect Python Azure Function to Azure SQL Using Managed Identity</a> appeared first on <a href="https://azureops.org">AzureOps</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="">An <strong>Azure Function</strong> is a lightweight, serverless compute option in Azure that lets you execute small chunks of code in response to events or schedules without managing servers. When connecting Azure Functions to <strong>Azure SQL Database</strong>, you need a secure way to authenticate without storing credentials. That’s where <strong>Managed Identity</strong> steps in. Managed Identity allows Azure resources (like Functions, VMs, Logic Apps) to access other Azure services securely by leveraging <strong>Azure Active Directory (AAD)</strong>.In this article, we’ll explore how to connect <a href="https://learn.microsoft.com/en-us/azure/azure-functions/functions-reference-python?tabs=get-started%2Casgi%2Capplication-level&amp;pivots=python-mode-decorators" target="_blank" rel="noreferrer noopener">Python Azure Function</a><strong> to Azure SQL</strong> using <strong>Managed Identity</strong>. You’ll learn step-by-step setup, Python code implementation, troubleshooting, and best practices to ensure your solution is secure and scalable.</p>



<h2 class="wp-block-heading">Why Use Managed Identity with Azure SQL?</h2>



<p class="">Storing passwords in configuration files is risky. Managed Identity solves this problem by:</p>



<ul class="wp-block-list">
<li class=""><strong>Eliminating Secrets</strong> → No passwords, no connection strings with credentials.</li>



<li class=""><strong>Centralized Identity Management</strong> → Uses <strong>Azure AD authentication</strong> for consistency.</li>



<li class=""><strong>Least Privilege Principle</strong> → Assigns only the required SQL permissions.</li>



<li class=""><strong>Automatic Rotation</strong> → No need to update or rotate credentials manually.</li>
</ul>



<p class="">This makes it the <strong>recommended authentication method</strong> when connecting Azure Functions to SQL Database.</p>



<p class="has-pale-cyan-blue-background-color has-background"><strong>Prerequisites:</strong><br>Before implementing, ensure you have:<br>1. An Azure subscription.<br>2. An Azure SQL Database already created.<br>3. An Azure Function App (Python runtime).<br>4. Azure CLI or Portal access.</p>



<p class="">This guide assumes you already have a basic understanding of creating an Azure Function. If you need a refresher, please refer to our previous article on <a href="https://azureops.org/articles/create-python-azure-function/" target="_blank" rel="noreferrer noopener">How to Create a Python Azure Function</a>.</p>



<p class="">Let&#8217;s now see how to connect Python Azure Function to Azure SQL database using managed identity authentication. In this example we will fetch data from a public API and securely write it to an <strong>Azure SQL Database</strong> table..</p>



<h3 class="wp-block-heading">Step 1: Set Up Your Azure SQL Database</h3>



<h4 class="wp-block-heading">Creating WeatherData Table</h4>



<p class="">In this guide, we’ll simulate fetching weather data from an API and storing it in Azure SQL.</p>



<p class="">Run the following SQL script inside your Azure SQL database:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; gutter: false; title: ; notranslate">
CREATE TABLE WeatherData (
    Id INT PRIMARY KEY IDENTITY(1,1),
    City VARCHAR(100),
    Temperature DECIMAL(5,2),
    Humidity INT,
    ForecastDate DATETIME
);

</pre></div>


<h3 class="wp-block-heading">Step 2: Enabling Managed Identity for Azure Function</h3>



<p class="">INavigate to your <strong>Function App</strong> in Azure Portal.</p>



<p class="">Under <strong>Settings → Identity</strong>, enable <strong>System Assigned Managed Identity</strong>.</p>



<p class="">Azure will create an identity in Microsoft Entra representing your Function.</p>



<figure class="wp-block-image size-full is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/Enable-Azure-function-managed-identity.png?ssl=1"><img loading="lazy" decoding="async" width="1072" height="715" data-attachment-id="8884" data-permalink="https://azureops.org/articles/connect-python-azure-function-to-azure-sql-using-managed-identity/enable-azure-function-managed-identity/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/Enable-Azure-function-managed-identity.png?fit=1072%2C715&amp;ssl=1" data-orig-size="1072,715" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Enable Azure function managed identity" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/Enable-Azure-function-managed-identity.png?fit=300%2C200&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/Enable-Azure-function-managed-identity.png?fit=1072%2C715&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/Enable-Azure-function-managed-identity.png?fit=1072%2C715&amp;ssl=1" alt="Connect Python Azure Function to Azure SQL" class="wp-image-8884" style="width:821px;height:auto" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/Enable-Azure-function-managed-identity.png?w=1072&amp;ssl=1 1072w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/Enable-Azure-function-managed-identity.png?resize=300%2C200&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/Enable-Azure-function-managed-identity.png?resize=930%2C620&amp;ssl=1 930w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/Enable-Azure-function-managed-identity.png?resize=768%2C512&amp;ssl=1 768w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/Enable-Azure-function-managed-identity.png?resize=450%2C300&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/Enable-Azure-function-managed-identity.png?resize=600%2C400&amp;ssl=1 600w" sizes="auto, (max-width: 1072px) 100vw, 1072px" /></a></figure>



<h3 class="wp-block-heading">Step 3: Grant the Managed Identity Access to Azure SQL</h3>



<h4 class="wp-block-heading">Configuring Azure Entra Admin</h4>



<p class="">To allow <strong>Managed Identity</strong> to authenticate, assign an <strong>Azure Entra admin</strong> for your SQL server.</p>



<ol class="wp-block-list">
<li class="">Go to Azure Portal → SQL Server → <strong>Active Entra Admin</strong>.</li>



<li class="">Assign an Azure Entra user/group as the admin.</li>



<li class="">Save changes.</li>
</ol>



<h3 class="wp-block-heading">Grant the permissions</h3>



<p class="">Now, connect to to your Azure SQL Database using the Entra ID authentication. You need to grant the Managed Identity permission to write to the database. Use the following T-SQL commands, replacing <code>&lt;your-azure-function-name&gt;</code> with the name of your function:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; gutter: false; title: ; notranslate">
CREATE USER &#x5B;your-azure-function-name] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datawriter ADD MEMBER &#x5B;your-azure-function-name];
</pre></div>


<ul class="wp-block-list">
<li class=""><code>CREATE USER</code> creates the identity inside SQL.</li>



<li class=""><code>ALTER ROLE</code> gives write permissions to insert/update/delete.</li>
</ul>



<p class="">Learn how to grant access to Azure SQL databases in this <a href="https://azureops.org/articles/grant-access-to-azure-sql-database/" target="_blank" rel="noreferrer noopener">post</a>.</p>



<h3 class="wp-block-heading">Step 4: Configure Application Settings</h3>



<p class="">In the Function App Environment variables, define following variables.</p>



<ul class="wp-block-list">
<li class=""><strong>SqlConnectionInfo</strong> → <code>Server=&lt;your-sql-server&gt;.database.windows.net;Database=&lt;your-db&gt;;</code></li>



<li class=""><strong>WEATHER_API_URL</strong> → https://api.open-meteo.com/v1/forecast?latitude=60.17&amp;longitude=24.94&amp;hourly=temperature_2m,relative_humidity_2m</li>



<li class=""><strong>TIMER_SCHEDULE</strong> → <code>0 * * * * *</code> (Runs every hour).</li>
</ul>



<figure class="wp-block-image size-full is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/Add-environment-variables-to-Azure-function.png?ssl=1"><img loading="lazy" decoding="async" width="975" height="677" data-attachment-id="8886" data-permalink="https://azureops.org/articles/connect-python-azure-function-to-azure-sql-using-managed-identity/add-environment-variables-to-azure-function/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/Add-environment-variables-to-Azure-function.png?fit=975%2C677&amp;ssl=1" data-orig-size="975,677" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Add environment variables to Azure function" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/Add-environment-variables-to-Azure-function.png?fit=300%2C208&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/Add-environment-variables-to-Azure-function.png?fit=975%2C677&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/Add-environment-variables-to-Azure-function.png?fit=975%2C677&amp;ssl=1" alt="Azure Function configuration settings
" class="wp-image-8886" style="width:850px;height:auto" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/Add-environment-variables-to-Azure-function.png?w=975&amp;ssl=1 975w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/Add-environment-variables-to-Azure-function.png?resize=300%2C208&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/Add-environment-variables-to-Azure-function.png?resize=893%2C620&amp;ssl=1 893w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/Add-environment-variables-to-Azure-function.png?resize=768%2C533&amp;ssl=1 768w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/Add-environment-variables-to-Azure-function.png?resize=450%2C312&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/09/Add-environment-variables-to-Azure-function.png?resize=600%2C417&amp;ssl=1 600w" sizes="auto, (max-width: 975px) 100vw, 975px" /></a></figure>



<h3 class="wp-block-heading">Step 5: Writing Python Azure Function Code</h3>



<p class="">Now, it&#8217;s time to write the code that will perform the data fetching and insertion. For this example, we&#8217;ll use a Python HTTP-triggered function and the <code>requests</code> and <code>pyodbc</code> libraries. You will also need the <code>azure-identity</code> package to handle the Managed Identity authentication.</p>



<h4 class="wp-block-heading">1. Installing Required Packages</h4>



<p class="">Add to <code>requirements.txt</code>:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; gutter: false; title: ; notranslate">
azure-functions
requests
pypyodbc
</pre></div>


<h4 class="wp-block-heading">2. Write the function code (<code>__init__.py</code>):</h4>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: python; title: ; notranslate">
import azure.functions as func
import logging, os, requests, pypyodbc

app = func.FunctionApp()

@app.timer_trigger(schedule=&quot;%TIMER_SCHEDULE%&quot;, arg_name=&quot;myTimer&quot;)
def load_weather_data_to_sql(myTimer: func.TimerRequest):
    if myTimer.past_due:
        logging.info(&quot;The timer is past due!&quot;)

    try:
        url = os.getenv(&quot;WEATHER_API_URL&quot;)
        response = requests.get(url)
        data = response.json().get(&quot;current&quot;, {})
        
        temperature = data.get(&quot;temperature_2m&quot;)
        humidity = data.get(&quot;relative_humidity_2m&quot;)
        city = &quot;Berlin&quot;

        conn = get_sql_connection()
        cursor = conn.cursor()
        cursor.execute(
            &quot;INSERT INTO WeatherData (City, Temperature, Humidity, ForecastDate) VALUES (?, ?, ?, GETDATE())&quot;,
            (city, temperature, humidity)
        )
        conn.commit()
        cursor.close()
        conn.close()
        logging.info(&quot;Weather data inserted successfully&quot;)

    except Exception as e:
        logging.error(f&quot;Error: {e}&quot;)

def get_sql_connection():
    conn_info = os.getenv(&quot;SqlConnectionInfo&quot;)
    parts = dict(item.split(&quot;=&quot;,1) for item in conn_info.split(&quot;;&quot;) if &quot;=&quot; in item)
    server, db = parts.get(&quot;Server&quot;), parts.get(&quot;Database&quot;)
# Depending on the python version, select appropriate ODBC Driver. For latest version 3.12, use ODBC Driver 18. For previous versions, try ODBC Driver 17.
    conn_str = f&quot;DRIVER={{ODBC Driver 18 for SQL Server}};Server={server};Database={db};Authentication=ActiveDirectoryMsi;&quot;
    return pypyodbc.connect(conn_str)

</pre></div>


<figure class="is-style-default wp-block-image size-large is-resized"><a href="https://marketplace.visualstudio.com/items?itemName=AzureOps.ssiscatalogerpro&amp;ssr=false#overview" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1200" height="148" data-attachment-id="4839" data-permalink="https://azureops.org/articles/azure-data-studio-for-sql-developers/scmw-horizontal-ad/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?fit=1326%2C163&amp;ssl=1" data-orig-size="1326,163" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="SCMW-horizontal-ad" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?fit=300%2C37&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?fit=1200%2C148&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?resize=1200%2C148&#038;ssl=1" alt="" class="wp-image-4839" style="object-fit:cover;width:811px;height:99px" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?resize=1200%2C148&amp;ssl=1 1200w, https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?resize=450%2C55&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?resize=600%2C74&amp;ssl=1 600w, https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?resize=300%2C37&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?resize=768%2C94&amp;ssl=1 768w, https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?w=1326&amp;ssl=1 1326w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></a></figure>



<h3 class="wp-block-heading">Step 6: Testing the Integration</h3>



<h4 class="wp-block-heading">Running Function Locally</h4>



<ul class="wp-block-list">
<li class="">Use <strong>Azure Functions Core Tools</strong>.</li>



<li class="">Set local.settings.json with required env variables.</li>



<li class="">Test the API call and SQL insertion.</li>
</ul>



<h4 class="wp-block-heading">Deploying to Azure</h4>



<ul class="wp-block-list">
<li class="">Push code to Azure Function App.</li>



<li class="">Check logs in <strong>Application Insights</strong> or <code>Log Stream</code>.</li>



<li class="">Common Issues and Troubleshooting.</li>
</ul>



<h2 class="wp-block-heading">Best Practices for Secure and Scalable Integration</h2>



<ul class="wp-block-list">
<li class="">Use <strong>least privilege</strong> for SQL roles.</li>



<li class="">Store configs in <strong>Azure Key Vault</strong>.</li>



<li class="">Monitor using <strong>Azure Monitor + Application Insights</strong>.</li>



<li class="">Implement retry logic for transient failures.</li>
</ul>



<h2 class="wp-block-heading">FAQs</h2>


<div class="wp-block-uagb-faq uagb-faq__outer-wrap uagb-block-1f3f6ec0 uagb-faq-icon-row uagb-faq-layout-accordion uagb-faq-expand-first-true uagb-faq-inactive-other-true uagb-faq__wrap uagb-buttons-layout-wrap uagb-faq-equal-height     " data-faqtoggle="true" role="tablist"><div class="wp-block-uagb-faq-child uagb-faq-child__outer-wrap uagb-faq-item uagb-block-152cbd76 " role="tab" tabindex="0"><div class="uagb-faq-questions-button uagb-faq-questions">			<span class="uagb-icon uagb-faq-icon-wrap">
								<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 448 512"><path d="M432 256c0 17.69-14.33 32.01-32 32.01H256v144c0 17.69-14.33 31.99-32 31.99s-32-14.3-32-31.99v-144H48c-17.67 0-32-14.32-32-32.01s14.33-31.99 32-31.99H192v-144c0-17.69 14.33-32.01 32-32.01s32 14.32 32 32.01v144h144C417.7 224 432 238.3 432 256z"></path></svg>
							</span>
						<span class="uagb-icon-active uagb-faq-icon-wrap">
								<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 448 512"><path d="M400 288h-352c-17.69 0-32-14.32-32-32.01s14.31-31.99 32-31.99h352c17.69 0 32 14.3 32 31.99S417.7 288 400 288z"></path></svg>
							</span>
			<span class="uagb-question">Can I use User-Assigned Managed Identity instead of System-Assigned?</span></div><div class="uagb-faq-content"><p>Yes, both are supported. User-assigned is better for multiple Functions sharing one identity.</p></div></div><div class="wp-block-uagb-faq-child uagb-faq-child__outer-wrap uagb-faq-item uagb-block-588ab62f " role="tab" tabindex="0"><div class="uagb-faq-questions-button uagb-faq-questions">			<span class="uagb-icon uagb-faq-icon-wrap">
								<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 448 512"><path d="M432 256c0 17.69-14.33 32.01-32 32.01H256v144c0 17.69-14.33 31.99-32 31.99s-32-14.3-32-31.99v-144H48c-17.67 0-32-14.32-32-32.01s14.33-31.99 32-31.99H192v-144c0-17.69 14.33-32.01 32-32.01s32 14.32 32 32.01v144h144C417.7 224 432 238.3 432 256z"></path></svg>
							</span>
						<span class="uagb-icon-active uagb-faq-icon-wrap">
								<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 448 512"><path d="M400 288h-352c-17.69 0-32-14.32-32-32.01s14.31-31.99 32-31.99h352c17.69 0 32 14.3 32 31.99S417.7 288 400 288z"></path></svg>
							</span>
			<span class="uagb-question">What if I want read-only access to SQL?</span></div><div class="uagb-faq-content"><p>Assign the <code>db_datareader</code> role instead of <code>db_datawriter</code>.</p></div></div><div class="wp-block-uagb-faq-child uagb-faq-child__outer-wrap uagb-faq-item uagb-block-81419b26 " role="tab" tabindex="0"><div class="uagb-faq-questions-button uagb-faq-questions">			<span class="uagb-icon uagb-faq-icon-wrap">
								<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 448 512"><path d="M432 256c0 17.69-14.33 32.01-32 32.01H256v144c0 17.69-14.33 31.99-32 31.99s-32-14.3-32-31.99v-144H48c-17.67 0-32-14.32-32-32.01s14.33-31.99 32-31.99H192v-144c0-17.69 14.33-32.01 32-32.01s32 14.32 32 32.01v144h144C417.7 224 432 238.3 432 256z"></path></svg>
							</span>
						<span class="uagb-icon-active uagb-faq-icon-wrap">
								<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 448 512"><path d="M400 288h-352c-17.69 0-32-14.32-32-32.01s14.31-31.99 32-31.99h352c17.69 0 32 14.3 32 31.99S417.7 288 400 288z"></path></svg>
							</span>
			<span class="uagb-question">Does Managed Identity work with Elastic Pools?</span></div><div class="uagb-faq-content"><p>Yes, it works across all Azure SQL deployment models.</p></div></div><div class="wp-block-uagb-faq-child uagb-faq-child__outer-wrap uagb-faq-item uagb-block-9bb291eb " role="tab" tabindex="0"><div class="uagb-faq-questions-button uagb-faq-questions">			<span class="uagb-icon uagb-faq-icon-wrap">
								<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 448 512"><path d="M432 256c0 17.69-14.33 32.01-32 32.01H256v144c0 17.69-14.33 31.99-32 31.99s-32-14.3-32-31.99v-144H48c-17.67 0-32-14.32-32-32.01s14.33-31.99 32-31.99H192v-144c0-17.69 14.33-32.01 32-32.01s32 14.32 32 32.01v144h144C417.7 224 432 238.3 432 256z"></path></svg>
							</span>
						<span class="uagb-icon-active uagb-faq-icon-wrap">
								<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 448 512"><path d="M400 288h-352c-17.69 0-32-14.32-32-32.01s14.31-31.99 32-31.99h352c17.69 0 32 14.3 32 31.99S417.7 288 400 288z"></path></svg>
							</span>
			<span class="uagb-question">Is pypyodbc required or can I use pyodbc?</span></div><div class="uagb-faq-content"><p>In Azure Functions Linux consumption plan, <code>pypyodbc</code> works more reliably.</p></div></div><div class="wp-block-uagb-faq-child uagb-faq-child__outer-wrap uagb-faq-item uagb-block-e8d40354 " role="tab" tabindex="0"><div class="uagb-faq-questions-button uagb-faq-questions">			<span class="uagb-icon uagb-faq-icon-wrap">
								<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 448 512"><path d="M432 256c0 17.69-14.33 32.01-32 32.01H256v144c0 17.69-14.33 31.99-32 31.99s-32-14.3-32-31.99v-144H48c-17.67 0-32-14.32-32-32.01s14.33-31.99 32-31.99H192v-144c0-17.69 14.33-32.01 32-32.01s32 14.32 32 32.01v144h144C417.7 224 432 238.3 432 256z"></path></svg>
							</span>
						<span class="uagb-icon-active uagb-faq-icon-wrap">
								<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 448 512"><path d="M400 288h-352c-17.69 0-32-14.32-32-32.01s14.31-31.99 32-31.99h352c17.69 0 32 14.3 32 31.99S417.7 288 400 288z"></path></svg>
							</span>
			<span class="uagb-question">Can I connect to SQL Server on-prem using Managed Identity?</span></div><div class="uagb-faq-content"><p>Not directly. You’d need a Hybrid Connection or VPN.</p></div></div><div class="wp-block-uagb-faq-child uagb-faq-child__outer-wrap uagb-faq-item uagb-block-8a7feb69 " role="tab" tabindex="0"><div class="uagb-faq-questions-button uagb-faq-questions">			<span class="uagb-icon uagb-faq-icon-wrap">
								<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 448 512"><path d="M432 256c0 17.69-14.33 32.01-32 32.01H256v144c0 17.69-14.33 31.99-32 31.99s-32-14.3-32-31.99v-144H48c-17.67 0-32-14.32-32-32.01s14.33-31.99 32-31.99H192v-144c0-17.69 14.33-32.01 32-32.01s32 14.32 32 32.01v144h144C417.7 224 432 238.3 432 256z"></path></svg>
							</span>
						<span class="uagb-icon-active uagb-faq-icon-wrap">
								<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 448 512"><path d="M400 288h-352c-17.69 0-32-14.32-32-32.01s14.31-31.99 32-31.99h352c17.69 0 32 14.3 32 31.99S417.7 288 400 288z"></path></svg>
							</span>
			<span class="uagb-question">Azure function execution giving Error: Error during function execution: (&#8216;01000&#8217;, &#8220;[01000] [unixODBC][Driver Manager]Can&#8217;t open lib &#8216;ODBC Driver 17 for SQL Server&#8217; : file not found&#8221;)</span></div><div class="uagb-faq-content"><p>This error usually occurs due to mismatch of ODBC Driver version. Depending on the python version, select appropriate ODBC Driver. For latest version 3.12, use ODBC Driver 18. For previous versions, try ODBC Driver 17.</p></div></div></div>


<h2 class="wp-block-heading">Conclusion</h2>



<p class="">By following these steps, you’ve securely connected a <strong>Python Azure Function</strong> to an <strong>Azure SQL Database</strong> using <strong>Managed Identity</strong>. This approach avoids hardcoding credentials, ensures automatic rotation, and aligns with cloud security best practices.</p>



<p class="">With this foundation, you can extend the Function to handle more APIs, perform ETL pipelines, or automate reporting tasks, all while staying secure and compliant.</p>



<p class="has-background" style="background-color:#beefca"><strong>Pro tips:</strong><br>1. Always prefer pypyodbc in Functions to avoid dependency issues.<br>2. Use retry policies when inserting data into SQL.<br>3. Keep Functions lightweight, offload heavy processing to Azure Data Factory or Microsoft Fabric.<br>4. If scaling out, validate SQL performance with connection pooling.<br>5. Learn how to <a href="https://azureops.org/articles/connect-azure-sql-from-data-factory-using-managed-identity/" target="_blank" rel="noreferrer noopener">connect to Azure SQL from Azure Data Factory</a> using managed identity.<br></p>



<h2 class="wp-block-heading">See more</h2>



<iframe loading="lazy" width="700" height="394" src="https://www.youtube.com/embed/t2h6xNVFQkc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="is-style-fill wp-block-button"><a class="wp-block-button__link has-white-color has-blush-light-purple-gradient-background has-text-color has-background has-link-color wp-element-button" href="https://azureops.org/product/ssis-catalog-migration-wizard-pro/" target="_blank" rel="noreferrer noopener">Download Now</a></div>
</div>
<p>The post <a href="https://azureops.org/articles/connect-python-azure-function-to-azure-sql-using-managed-identity/">Connect Python Azure Function to Azure SQL Using Managed Identity</a> appeared first on <a href="https://azureops.org">AzureOps</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8874</post-id>	</item>
		<item>
		<title>Data Agent in Microsoft Fabric &#8211; Here&#8217;s How it Works</title>
		<link>https://azureops.org/articles/data-agent-in-microsoft-fabric-heres-how-it-works/</link>
		
		<dc:creator><![CDATA[Kunal Rathi]]></dc:creator>
		<pubDate>Thu, 07 Aug 2025 16:15:51 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Microsoft Fabric]]></category>
		<category><![CDATA[data agent]]></category>
		<category><![CDATA[data agent in ai foundry]]></category>
		<category><![CDATA[data agent in copilot]]></category>
		<guid isPermaLink="false">https://azureops.org/?p=8717</guid>

					<description><![CDATA[<p>In this post, I’ll walk you through how I built a Fabric Data Agent on top of the standard AdventureWorksDW dataset (via shortcuts), and how you can too — even if you’re a complete beginner.</p>
<p>The post <a href="https://azureops.org/articles/data-agent-in-microsoft-fabric-heres-how-it-works/">Data Agent in Microsoft Fabric &#8211; Here&#8217;s How it Works</a> appeared first on <a href="https://azureops.org">AzureOps</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="">Ever wished you could just ask your data questions in plain English and get instant, intelligent answers?<br>With Microsoft Fabric’s new <strong>Data Agent</strong>, that’s not just possible, it’s powerful.</p>



<p class="">In this post, I’ll walk you through how I built a Fabric Data Agent on top of the standard AdventureWorksDW dataset, and how you can too, even if you’re a complete beginner.</p>



<h2 class="wp-block-heading">TL;DR</h2>



<p class="">Microsoft Fabric’s <strong>Data Agent</strong> lets you ask questions about your data in natural language; no SQL, DAX, or visuals required. Think of it like a chat-based analyst that already knows your data model and never sleeps. This article walks you through building a Data Agent on top of AdventureWorksDW, writing agent instructions, adding data sources, and exploring advanced use cases like AI Foundry and multi-agent systems. By the end, you&#8217;ll be able to create your own interactive AI analyst in under 30 minutes.</p>



<p class="has-pale-cyan-blue-background-color has-background"><strong>Prerequisites:</strong><br>1. You must have access to Microsoft Fabric Capacity specifically F2 or higher.<br>2. Only workspaces with Fabric-enabled capacity will show the &#8220;AI Agent&#8221; option in the &#8220;+ New&#8221; menu.<br>3.Your <strong>Fabric admin</strong> must enable the <strong>Data Agent preview</strong> in the <a href="https://learn.microsoft.com/en-us/fabric/data-science/data-agent-tenant-settings?utm_source=chatgpt.com">Tenant Settings</a> within the Microsoft Fabric Admin Portal. if you don&#8217;t have admin rights, contact your admin.</p>



<h2 class="wp-block-heading">How to Create a Data Agent in Microsoft Fabric</h2>



<p class="">If you’ve never done this before, don’t worry. Here’s a simple step-by-step guide.</p>



<h3 class="wp-block-heading">Step 1: Open the Microsoft Fabric Workspace</h3>



<ol class="wp-block-list">
<li class="">Go to <a class="" href="https://app.fabric.microsoft.com">https://app.fabric.microsoft.com</a>.</li>



<li class="">Select or create a new <strong>Workspace</strong> where your Lakehouse is located.</li>
</ol>



<h3 class="wp-block-heading">Step 2: Create a Lakehouse (if not already done)</h3>



<ol class="wp-block-list">
<li class="">Click <strong>New &gt; Lakehouse</strong> and give it a name (e.g., <code>demolakehouse</code>).</li>



<li class="">Add your data using <strong>Shortcuts</strong>:
<ul class="wp-block-list">
<li class="">Go to the <strong>Tables</strong> pane inside the Lakehouse.</li>



<li class="">Click <strong>Add Shortcut &gt; OneLake data</strong>.</li>



<li class="">Browse and select the relevant tables (e.g., from AdventureWorksDW).</li>
</ul>
</li>
</ol>



<p class="">I used the classic <strong>AdventureWorksDW</strong> dataset, the same one you’ve probably seen in BI demos. Instead of importing tables manually, I used <strong>OneLake Shortcuts</strong>, which connect existing data without duplicating it.</p>



<h3 class="wp-block-heading">Step 3: Create the Data Agent</h3>



<ol class="wp-block-list">
<li class="">In your workspace, click <strong>New &gt; Data agent</strong> <strong>(preview)</strong>.</li>



<li class="">Choose the <strong>Lakehouse</strong> where your data is stored. You can also choose semantic model in case you have created semantic model on top of your lakehouse.</li>



<li class="">Give your agent a name (e.g., <code>Sales Insights Agent</code>).</li>



<li class="">Click <strong>Create</strong> — this opens the agent configuration screen.</li>
</ol>



<figure class="wp-block-image size-large is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Create-data-agent.png?ssl=1"><img loading="lazy" decoding="async" width="1736" height="396" data-attachment-id="8742" data-permalink="https://azureops.org/articles/data-agent-in-microsoft-fabric-heres-how-it-works/create-data-agent/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Create-data-agent.png?fit=1736%2C396&amp;ssl=1" data-orig-size="1736,396" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Create data agent" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Create-data-agent.png?fit=300%2C68&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Create-data-agent.png?fit=1200%2C274&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Create-data-agent.png?fit=1200%2C274&amp;ssl=1" alt="fabric data agent" class="wp-image-8742" style="width:1179px;height:auto" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Create-data-agent.png?w=1736&amp;ssl=1 1736w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Create-data-agent.png?resize=300%2C68&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Create-data-agent.png?resize=1200%2C274&amp;ssl=1 1200w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Create-data-agent.png?resize=768%2C175&amp;ssl=1 768w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Create-data-agent.png?resize=1536%2C350&amp;ssl=1 1536w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Create-data-agent.png?resize=450%2C103&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Create-data-agent.png?resize=600%2C137&amp;ssl=1 600w" sizes="auto, (max-width: 1709px) 100vw, 1709px" /></a></figure>



<h3 class="wp-block-heading">Step 4: Add a Data Source to the Data Agent</h3>



<p class="">Once the agent is created, you’ll need to give it instructions and connect it to your data.</p>



<ol class="wp-block-list">
<li class="">Inside the agent editor, go to the <strong>Data Sources</strong> tab.</li>



<li class="">Click <strong>+ Add data source</strong> and choose the <code>Lakehouse</code> as shown in the image below.</li>
</ol>



<h3 class="wp-block-heading">Step 5: Add the Agent Instructions</h3>



<figure class="wp-block-image size-large is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/data-agent-instructions-1.png?ssl=1"><img loading="lazy" decoding="async" width="1615" height="876" data-attachment-id="8752" data-permalink="https://azureops.org/articles/data-agent-in-microsoft-fabric-heres-how-it-works/data-agent-instructions-2/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/data-agent-instructions-1.png?fit=1615%2C876&amp;ssl=1" data-orig-size="1615,876" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="data agent instructions" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/data-agent-instructions-1.png?fit=300%2C163&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/data-agent-instructions-1.png?fit=1200%2C651&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/data-agent-instructions-1.png?fit=1200%2C651&amp;ssl=1" alt="Data Agent in Microsoft Fabric - AI instructions" class="wp-image-8752" style="width:1525px;height:auto" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/data-agent-instructions-1.png?w=1615&amp;ssl=1 1615w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/data-agent-instructions-1.png?resize=300%2C163&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/data-agent-instructions-1.png?resize=1200%2C651&amp;ssl=1 1200w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/data-agent-instructions-1.png?resize=1143%2C620&amp;ssl=1 1143w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/data-agent-instructions-1.png?resize=768%2C417&amp;ssl=1 768w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/data-agent-instructions-1.png?resize=1536%2C833&amp;ssl=1 1536w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/data-agent-instructions-1.png?resize=450%2C244&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/data-agent-instructions-1.png?resize=600%2C325&amp;ssl=1 600w" sizes="auto, (max-width: 1615px) 100vw, 1615px" /></a></figure>



<ol class="wp-block-list">
<li class="">Go to the <strong>Agent Instructions</strong> tab.</li>



<li class="">Provide instuctions for the data agent about it&#8217;s goal and responsibilities. </li>
</ol>



<pre class="wp-block-preformatted"><code>Goal:<br>Assist users in analyzing sales, customers, geography, and product performance.<br><br>Key Relationships:<br>- FactInternetSales ➡ ProductKey ➡ DimProduct ➡ Subcategory ➡ Category<br>- FactInternetSales ➡ CustomerKey ➡ DimCustomer ➡ Geography<br>- FactInternetSales ➡ OrderDateKey ➡ DimDate<br><br>Ask me things like:<br>- Top-selling categories last year?<br>- Sales trend in Q1 2024?<br>- Which cities had highest average order size?<br><br>Answer in charts, tables, or summaries where helpful.<br></code></pre>



<h3 class="wp-block-heading">Step 6: Add the Data Source Instructions</h3>



<ol class="wp-block-list">
<li class="">Add the data source instruction to let data agent understand your data model.</li>
</ol>



<pre class="wp-block-preformatted">yamlCopyEdit<code>name: AdventureWorksDW_Shortcut
type: Lakehouse
tables:
  - name: DimCustomer_shortcut
    description: Customer demographics and keys
  - name: DimDate_shortcut
    description: Calendar date dimension
  - name: DimProduct_shortcut
    description: Product attributes
  - name: DimProductCategory_shortcut
    description: Categories of products
  - name: DimProductSubcategory_shortcut
    description: Subcategories of products
  - name: DimGeography_shortcut
    description: Country, state, and city details
  - name: FactInternetSales_shortcut
    description: Sales facts including sales amount, quantity, and dates
</code></pre>



<figure class="is-style-default wp-block-image size-large is-resized"><a href="https://marketplace.visualstudio.com/items?itemName=AzureOps.ssiscatalogerpro&amp;ssr=false#overview" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1200" height="148" data-attachment-id="4839" data-permalink="https://azureops.org/articles/azure-data-studio-for-sql-developers/scmw-horizontal-ad/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?fit=1326%2C163&amp;ssl=1" data-orig-size="1326,163" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="SCMW-horizontal-ad" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?fit=300%2C37&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?fit=1200%2C148&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?resize=1200%2C148&#038;ssl=1" alt="" class="wp-image-4839" style="object-fit:cover;width:811px;height:99px" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?resize=1200%2C148&amp;ssl=1 1200w, https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?resize=450%2C55&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?resize=600%2C74&amp;ssl=1 600w, https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?resize=300%2C37&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?resize=768%2C94&amp;ssl=1 768w, https://i0.wp.com/azureops.org/wp-content/uploads/2023/01/SCMW-horizontal-ad.png?w=1326&amp;ssl=1 1326w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></a></figure>



<h3 class="wp-block-heading">Step 7: Test the Agent and fine tunning</h3>



<p class="">Start asking questions to the agent like;</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="">1. List top 10 cities by internet sales in last available 12 months.</p>
</blockquote>



<figure class="wp-block-image size-large"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Sample-question-to-data-agent-1.png?ssl=1"><img loading="lazy" decoding="async" width="1594" height="792" data-attachment-id="8745" data-permalink="https://azureops.org/articles/data-agent-in-microsoft-fabric-heres-how-it-works/sample-question-to-data-agent-2/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Sample-question-to-data-agent-1.png?fit=1594%2C792&amp;ssl=1" data-orig-size="1594,792" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Sample question to data agent" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Sample-question-to-data-agent-1.png?fit=300%2C149&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Sample-question-to-data-agent-1.png?fit=1200%2C596&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Sample-question-to-data-agent-1.png?fit=1200%2C596&amp;ssl=1" alt="fabric data agent demo" class="wp-image-8745" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Sample-question-to-data-agent-1.png?w=1594&amp;ssl=1 1594w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Sample-question-to-data-agent-1.png?resize=300%2C149&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Sample-question-to-data-agent-1.png?resize=1200%2C596&amp;ssl=1 1200w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Sample-question-to-data-agent-1.png?resize=768%2C382&amp;ssl=1 768w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Sample-question-to-data-agent-1.png?resize=1536%2C763&amp;ssl=1 1536w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Sample-question-to-data-agent-1.png?resize=450%2C224&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Sample-question-to-data-agent-1.png?resize=600%2C298&amp;ssl=1 600w" sizes="auto, (max-width: 1594px) 100vw, 1594px" /></a></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="">2. List top 5 customers who made the highest purchases in the latest available year:</p>
</blockquote>



<figure class="wp-block-image size-full"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Sample-query-2-data-agent.png?ssl=1"><img loading="lazy" decoding="async" width="989" height="714" data-attachment-id="8746" data-permalink="https://azureops.org/articles/data-agent-in-microsoft-fabric-heres-how-it-works/sample-query-2-data-agent/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Sample-query-2-data-agent.png?fit=989%2C714&amp;ssl=1" data-orig-size="989,714" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Sample query 2 data agent" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Sample-query-2-data-agent.png?fit=300%2C217&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Sample-query-2-data-agent.png?fit=989%2C714&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Sample-query-2-data-agent.png?fit=989%2C714&amp;ssl=1" alt="fabric data agent demo" class="wp-image-8746" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Sample-query-2-data-agent.png?w=989&amp;ssl=1 989w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Sample-query-2-data-agent.png?resize=300%2C217&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Sample-query-2-data-agent.png?resize=859%2C620&amp;ssl=1 859w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Sample-query-2-data-agent.png?resize=768%2C554&amp;ssl=1 768w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Sample-query-2-data-agent.png?resize=450%2C325&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/07/Sample-query-2-data-agent.png?resize=600%2C433&amp;ssl=1 600w" sizes="auto, (max-width: 989px) 100vw, 989px" /></a></figure>



<p class="">Notice that it also provides the SQL query it has executed on the lakehouse to get the required output.</p>



<p class="">If the data source and instructions are set correctly, the agent should respond with meaningful tables or summaries. In case you observe issues in the responses, you may need to fine tune the AI instructions and test again.</p>



<h2 class="wp-block-heading">When Should You Use Data Agents?</h2>



<p class="">If you&#8217;re already using:</p>



<ul class="wp-block-list">
<li class="">A well-modeled star schema</li>



<li class="">Lakehouse tables or Delta format</li>



<li class="">Power BI reports or semantic models</li>



<li class="">Microsoft Fabric workspaces with clean relationships</li>
</ul>



<p class="">Then a Data Agent will act like a bridge between your data and your business users. No technical barrier — just questions and answers.</p>



<h2 class="wp-block-heading">Integrations and Advanced Use Cases</h2>



<p class="">What makes Fabric Data Agents truly powerful is not just that they can answer questions — but that they can <strong>plug into larger AI and data ecosystems</strong>. Here are a few ways to take your agent to the next level.</p>



<h3 class="wp-block-heading">1. Integration with Azure AI Foundry</h3>



<p class="">Microsoft Azure&#8217;s <a href="https://ai.azure.com/" target="_blank" rel="noreferrer noopener">AI Foundry</a> allows you to orchestrate LLM-driven pipelines, combine ML models with data operations, and deploy custom copilots. Your Data Agent can be used here in multiple ways:</p>



<ul class="wp-block-list">
<li class="">As a <strong>ready knowledge base</strong> within Foundry apps</li>



<li class="">To <strong>summarize and explain insights</strong> from streaming or batch pipelines</li>



<li class="">As a <strong>modular AI skill</strong> within a larger orchestrated flow</li>
</ul>



<p class="">For example, you could use the agent to automatically generate weekly sales summaries and send them via email to business users — no dashboards needed.</p>



<h3 class="wp-block-heading">2. Use in Multi-Agent Systems with Copilot Studio</h3>



<p class="">Microsoft recently <a href="https://blog.fabric.microsoft.com/en-us/blog/fabric-data-agents-microsoft-copilot-studio-a-new-era-of-multi-agent-orchestration" target="_blank" rel="noreferrer noopener">announced </a>integration of Fabric data agent with Copilot Studio. This means data agent also supports <strong>multi-agent</strong> patterns where different agents work together, each specializing in their role.</p>



<p class="">Your Data Agent can act as:</p>



<ul class="wp-block-list">
<li class="">A <strong>domain expert</strong> (e.g., Sales Agent, Inventory Agent)</li>



<li class="">A <strong>knowledge base</strong> that other agents query</li>



<li class="">A <strong>collaborative AI</strong> alongside others like a document reader, chatbot, or metric generator</li>
</ul>



<h4 class="wp-block-heading">Example: Multi-Agent Use Case</h4>



<p class="">Imagine a scenario where you’ve built:</p>



<ul class="wp-block-list">
<li class="">A <strong>&#8220;Sales Insights Agent&#8221;</strong> (based on the Sales model)</li>



<li class="">A <strong>&#8220;Customer Sentiment Agent&#8221;</strong> (that reads survey data or feedback documents)</li>



<li class="">A <strong>&#8220;Decision Support Agent&#8221;</strong> (that aggregates insights from both)</li>
</ul>



<p class="">Now, a user asks the Decision Support Agent:<br><strong>&#8220;Should we invest more in red-colored bikes for Q3 promotions?&#8221;</strong></p>



<p class="">Here’s what happens behind the scenes:</p>



<ol class="wp-block-list">
<li class="">The <strong>Sales Agent</strong> looks up sales trends for red bikes from your Data Agent.</li>



<li class="">The <strong>Sentiment Agent</strong> checks recent customer feedback about product quality or color preferences.</li>



<li class="">The <strong>Decision Agent</strong> combines both and generates a recommendation — backed by data and context.</li>
</ol>



<p class="">This makes your Data Agent a <strong>building block in a broader AI ecosystem</strong>, not just a standalone tool.</p>



<h2 class="wp-block-heading">Final Thoughts</h2>



<p class="">Data Agents in Fabric aren&#8217;t just experimental toys; they&#8217;re fully capable assistants for real business scenarios. Whether you&#8217;re a data engineer, analyst, or decision maker, you’ll find value in being able to converse with your data.</p>



<p class="">For me, this agent worked perfectly with the AdventureWorksDW model and started answering meaningful business questions within minutes,  no DAX, no Power BI visuals, no joins to write.</p>



<p class="">This service is currently in preview. It does not currently render charts. Hopefully, future updates will enable it to generate Power BI level visuals on the fly.</p>



<h2 class="wp-block-heading">See more</h2>



<iframe loading="lazy" width="700" height="394" src="https://www.youtube.com/embed/t2h6xNVFQkc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="is-style-fill wp-block-button"><a class="wp-block-button__link has-white-color has-blush-light-purple-gradient-background has-text-color has-background has-link-color wp-element-button" href="https://azureops.org/product/ssis-catalog-migration-wizard-pro/" target="_blank" rel="noreferrer noopener">Download Now</a></div>
</div>



<p class="has-background" style="background-color:#beefca"><strong>Pro tips:</strong><br>1. <a href="https://azureops.org/articles/ssms-21-copilot/" target="_blank" rel="noreferrer noopener">Learn </a>how to integrate Microsoft Copilot in SQL Server Management Studio 21.</p>
<p>The post <a href="https://azureops.org/articles/data-agent-in-microsoft-fabric-heres-how-it-works/">Data Agent in Microsoft Fabric &#8211; Here&#8217;s How it Works</a> appeared first on <a href="https://azureops.org">AzureOps</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8717</post-id>	</item>
		<item>
		<title>Transferring Sensitive Data During SSIS Catalog Migrations to Another Server</title>
		<link>https://azureops.org/articles/transferring-sensitive-data-during-ssis-catalog-migrations-to-another-server/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 03 Jul 2025 11:34:19 +0000</pubDate>
				<category><![CDATA[Microsoft BI]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SSIS]]></category>
		<category><![CDATA[SSIS Catalog Migration]]></category>
		<category><![CDATA[ssis environment varriables]]></category>
		<category><![CDATA[ssis project parameters]]></category>
		<category><![CDATA[ssisdb encryption key]]></category>
		<guid isPermaLink="false">https://azureops.org/?p=8534</guid>

					<description><![CDATA[<p>Migrating your SQL Server Integration Services (SSIS) Catalog to a new server or instance is a common administrative task, but it often brings with it a significant challenge: the secure handling of sensitive data. Packages within the SSIS Catalog frequently contain connection managers with sensitive information like database credentials, API keys, or other confidential parameters. [&#8230;]</p>
<p>The post <a href="https://azureops.org/articles/transferring-sensitive-data-during-ssis-catalog-migrations-to-another-server/">Transferring Sensitive Data During SSIS Catalog Migrations to Another Server</a> appeared first on <a href="https://azureops.org">AzureOps</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="">Migrating your SQL Server Integration Services (SSIS) Catalog to a new server or instance is a common administrative task, but it often brings with it a significant challenge: the secure handling of <strong>sensitive data</strong>. Packages within the SSIS Catalog frequently contain connection managers with sensitive information like database credentials, API keys, or other confidential parameters.<sup></sup> The thought of exposing or mishandling this data during <strong>SSIS migration</strong> can be a daunting prospect.</p>



<p class="">Traditionally, <strong>migrating SSIS Catalog</strong>, especially when dealing with encrypted sensitive data, could be a complex affair. One of the major hurdles was the perceived need to know the <code>SSISDB</code> encryption key from the source server. This key is crucial for decrypting sensitive data stored within the catalog. If this key was lost, unknown, or not easily accessible, the <strong>SSIS Catalog migration process</strong> could become a nightmare, often leading to manual reconfiguration or even data loss.</p>



<p class="">This is where tools like the <a href="https://ssiscataloger.azureops.org/" target="_blank" rel="noreferrer noopener">SSIS Catalog Migration Wizard</a> truly shine, revolutionizing how we approach <strong>SSIS Catalog migrations</strong>, particularly concerning sensitive data and environment-specific configurations.</p>



<h3 class="wp-block-heading">SSIS Catalog Migration Wizard: A Secure and Streamlined Solution for SSIS Data</h3>



<p class="">The <strong>SSIS Catalog Migration Wizard</strong> is a powerful and user-friendly tool designed to simplify the process of moving your SSIS Catalog between SQL Server instances.<sup></sup> Its most significant advantage when it comes to sensitive data is its ability to handle encrypted information without requiring the user to possess the <code>SSISDB</code> encryption key from the source server. Beyond sensitive data, it offers critical features for managing environment and parameter values during the transfer.</p>



<p class=""><strong>How it addresses sensitive data and configuration concerns during SSIS migration:</strong></p>



<ul class="wp-block-list">
<li class=""><strong>No <code>SSISDB</code> Encryption Key Required:</strong> This is the paramount feature. The Wizard intelligently extracts the necessary components, including encrypted sensitive data, from the source SSISDB and correctly re-encrypts them on the destination SSISDB using the <em>destination&#8217;s</em> encryption key. This means you don&#8217;t need to go through the arduous process of retrieving, backing up, or restoring the <strong>source SSISDB encryption key</strong>. This drastically reduces the risk of exposing sensitive data and simplifies the <strong>SSIS Catalog migration</strong> significantly.</li>



<li class=""><strong>Seamless Re-encryption:</strong> The Wizard handles the decryption and re-encryption process behind the scenes. When an <strong>SSIS package with sensitive data</strong> is migrated, the Wizard ensures that this data is correctly encrypted with the destination server&#8217;s <code>SSISDB</code> encryption key, maintaining the integrity and security of your sensitive information.</li>



<li class=""><strong>Replace Environment Variable and Parameter Values:</strong> A significant pain point in manual migrations is updating countless environment variables and parameter values to match the new environment. The <strong>SSIS Catalog Migration Wizard</strong> offers the crucial capability to define and replace these values <em>during the migration process itself</em>. This means you can proactively map old server names, database names, file paths, or other environment-specific settings to their new counterparts.</li>



<li class=""><strong>Reduced Manual Intervention:</strong> By automating the handling of sensitive data and providing the ability to replace environment-specific values, the Wizard minimizes the need for manual intervention post-migration. This reduces the chances of human error that could lead to data exposure, corruption, or broken package execution. You won&#8217;t have to manually update connection strings, package parameters, or environment variables one by one, saving significant time and effort in <strong>SSIS data migration</strong> and configuration.</li>



<li class=""><strong>Comprehensive Migration:</strong> Beyond sensitive data and configurable parameters, the Wizard migrates your entire SSIS Catalog structure, including projects, environments, references, etc. This ensures a consistent and complete transfer of your SSIS deployment.</li>
</ul>



<h3 class="wp-block-heading">Proactive Strategies for Seamless Variable and Parameter Value Replacement</h3>



<p class="">To leverage the Wizard&#8217;s capability for variable and parameter value replacement effectively, consider SCMW&#8217;s <a href="https://ssiscataloger.azureops.org/getting-started/#replace-environment-variable-and-parameter-values">proactive suggestions</a>:</p>



<ul class="wp-block-list">
<li class=""><strong>Simplified Updating:</strong> The wizard streamlines the process of updating environment variables and parameter values to match the target environment during migration. </li>



<li class=""><strong>Configurable Key-Value Pairs:</strong> Users can set up specific key-value pairs to replace existing values in both environment variables and SSIS project/package parameters. </li>



<li class=""><strong>Intelligent Suggestions:</strong> The wizard features a &#8220;Suggest&#8221; button that provides recommendations for replacements based on the chosen &#8220;Replace Scope,&#8221; aiding users in configuring the correct values. </li>



<li class=""><strong>Detailed Review:</strong> Users can review the specific environment variables and parameters that will be affected by clicking on the &#8220;Ref&#8221; column, which displays detailed mappings, ensuring accuracy and control over the migration process.</li>
</ul>



<figure class="wp-block-image size-full"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/ReplaceVariables.gif?ssl=1"><img loading="lazy" decoding="async" width="1200" height="672" data-attachment-id="8543" data-permalink="https://azureops.org/articles/transferring-sensitive-data-during-ssis-catalog-migrations-to-another-server/replacevariables/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/ReplaceVariables.gif?fit=1200%2C672&amp;ssl=1" data-orig-size="1200,672" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="ReplaceVariables" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/ReplaceVariables.gif?fit=300%2C168&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/ReplaceVariables.gif?fit=1200%2C672&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/ReplaceVariables.gif?fit=1200%2C672&amp;ssl=1" alt="Migrating SSISDB Sensitive Environment Variables" class="wp-image-8543"/></a></figure>



<p class="">This functionality ensures that SSIS packages and projects are correctly configured for the new environment without manual intervention, saving time and reducing potential errors.</p>



<h3 class="wp-block-heading">Best Practices for a Secure SSIS Catalog Migration</h3>



<p class="">While the <strong>SSIS Catalog Migration Wizard</strong> significantly simplifies the process, it&#8217;s still crucial to adhere to best practices for a truly secure migration:</p>



<ol class="wp-block-list">
<li class=""><strong>Plan Thoroughly:</strong> Before initiating any migration, have a clear plan. Identify all projects, environments, sensitive data, and environment-specific configurations involved.</li>



<li class=""><strong>Backup Everything:</strong> Always perform full backups of both the source and destination <code>SSISDB</code> databases before starting the migration. This provides a rollback point in case of any unforeseen issues. You can consider backing us SSISDB to .scmv file using SSIS Catalog Migration Wizard.</li>



<li class=""><strong>Test in a Non-Production Environment:</strong> If possible, perform a test migration to a non-production environment first. This allows you to identify and resolve any potential issues, including incorrect parameter replacements, before impacting your production systems.</li>



<li class=""><strong>Validate Post-Migration:</strong> After the migration is complete, thoroughly validate that all packages and connections are functioning correctly. Pay special attention to packages that use sensitive data and those relying on replaced environment variables to ensure they are executing as expected.</li>



<li class=""><strong>Secure Destination Environment:</strong> Ensure your destination SQL Server instance and SSISDB are configured with appropriate security measures, including strong passwords, least privilege principles, and network security.</li>
</ol>



<h2 class="wp-block-heading">Conclusion</h2>



<p class=""><strong>Migrating SSIS Catalogs</strong>, especially those containing <strong>sensitive data</strong> and requiring intricate environment-specific adjustments, can be a complex undertaking. However, with the advent of tools like the <strong>SSIS Catalog Migration Wizard</strong>, this process has become significantly more manageable and secure. By eliminating the need to know the <strong>source <code>SSISDB</code> encryption key</strong> and automating the re-encryption process, coupled with the powerful ability to replace environment variable and parameter values during migration, the Wizard empowers administrators to perform <strong>SSIS migrations</strong> with confidence. This ensures the integrity and confidentiality of their sensitive data while proactively managing configuration changes throughout the transition. Embrace this powerful tool to streamline your next <strong>SSIS Catalog migration</strong>, and experience a truly hassle-free and secure transfer.</p>



<h2 class="wp-block-heading" id="how-to-install">Installation</h2>



<p class="">SSIS Catalog Migration Wizard can be installed as an extension to:</p>



<p class="">1.&nbsp;<a href="https://marketplace.visualstudio.com/items?itemName=AzureOps.ssiscatalogerpro&amp;ssr=false#overview" target="_blank" rel="noreferrer noopener">Visual Studio 2017</a>,&nbsp;<a href="https://marketplace.visualstudio.com/items?itemName=AzureOps.ssiscatalogerpro&amp;ssr=false#overview" target="_blank" rel="noreferrer noopener">Visual Studio 2019</a>&nbsp;&amp;&nbsp;<a href="https://marketplace.visualstudio.com/items?itemName=AzureOps.SSISCataloger2022" target="_blank" rel="noreferrer noopener">Visual Studio 2022</a>.<br>2. SSMS 18, 19, 20, 21(preview)<br>3. Standalone tool.</p>



<p class="">More details are available in this&nbsp;<a href="https://youtu.be/VcYksuavI54" target="_blank" rel="noreferrer noopener">tutorial</a>.</p>



<h2 class="wp-block-heading">See more</h2>



<iframe loading="lazy" width="700" height="394" src="https://www.youtube.com/embed/t2h6xNVFQkc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="is-style-fill wp-block-button"><a class="wp-block-button__link has-white-color has-blush-light-purple-gradient-background has-text-color has-background has-link-color wp-element-button" href="https://azureops.org/product/ssis-catalog-migration-wizard-pro/" target="_blank" rel="noreferrer noopener">Download Now</a></div>
</div>
<p>The post <a href="https://azureops.org/articles/transferring-sensitive-data-during-ssis-catalog-migrations-to-another-server/">Transferring Sensitive Data During SSIS Catalog Migrations to Another Server</a> appeared first on <a href="https://azureops.org">AzureOps</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8534</post-id>	</item>
		<item>
		<title>How to Migrate SSRS Reports from One Server to Another (Step-by-Step)</title>
		<link>https://azureops.org/articles/ssrs-report-migration/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Mon, 23 Jun 2025 15:28:11 +0000</pubDate>
				<category><![CDATA[Microsoft BI]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SSRS]]></category>
		<guid isPermaLink="false">https://azureops.org/?p=8658</guid>

					<description><![CDATA[<p>In this guide, we’ll walk through the ssrs report migration process and share best practices to avoid common pitfalls.</p>
<p>The post <a href="https://azureops.org/articles/ssrs-report-migration/">How to Migrate SSRS Reports from One Server to Another (Step-by-Step)</a> appeared first on <a href="https://azureops.org">AzureOps</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="">Migrating SSRS reports from one server to another is a common task for <strong>developers, DBAs, and DevOps engineers</strong> during SQL Server upgrades, cloud migrations, or environment rebuilds.<br>Managing SSRS report migrations can be a time-consuming and error-prone process, especially when dealing with large enterprise report servers that contain hundreds of reports, datasets, data sources, and subscriptions. To simplify this process, we created the <a href="https://ssrsmigrationwizard.azureops.org/" target="_blank" rel="noreferrer noopener">SSRS Reports Migration Wizard</a>, a Visual Studio extension and standalone utility that helps you automate and validate migrations with minimal manual steps. This guide walks through a <strong>production-safe, step-by-step SSRS report migration process</strong>, covering reports, shared data sources, subscriptions, permissions, and post-migration validation.</p>



<h2 class="wp-block-heading"> What Is SSRS Reports Migration Wizard?</h2>



<p class="">SSRS Reports Migration Wizard is a tool that enables you to:</p>



<ul class="wp-block-list">
<li class="">Migrate reports, shared datasets, and shared data sources</li>



<li class="">Copy subscriptions (standard and data-driven)</li>



<li class="">Review and update connection strings and credentials</li>



<li class="">Migrate between servers, folders, or environments</li>



<li class=""><a href="https://azureops.org/articles/download-all-ssrs-reports-from-report-server/" target="_blank" rel="noreferrer noopener">Export and import SSRS items</a> using a lightweight <code>.SRMW</code> file format</li>



<li class="">Perform offline review and validation before actual migration</li>
</ul>



<p class="">The wizard is available as a <strong>Visual Studio extension</strong> and as a <strong>standalone tool</strong>.</p>



<p class="has-pale-cyan-blue-background-color has-background"><strong>Prerequisites</strong>:<br>Before Migrating SQL Server Reports<br>1. You have access to both source and target SSRS servers.<br>2. Your user account has:<br>-at least <strong>Browser</strong> role on the <strong>source</strong>&#8211;<br>-at least <strong>Publisher</strong> role on the <strong>target</strong><br>If you&#8217;re unsure how to grant access, follow the instructions in the <a>Granting Access Guide</a>.</p>



<h2 class="wp-block-heading">Use Cases</h2>



<ul class="wp-block-list">
<li class="">Migrating from dev to test/prod environments</li>



<li class="">Consolidating multiple SSRS servers</li>



<li class="">Backing up and archiving SSRS artifacts</li>



<li class="">Migrating from the old SSRS report server to the new server.</li>



<li class="">Migrate SSRS reports to Power BI report server.</li>
</ul>



<h2 class="wp-block-heading">Step-by-Step SSRS Report Migration Process</h2>



<iframe loading="lazy" width="700" height="394" src="https://www.youtube.com/embed/U-U-PAzOLP4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>



<p class="">Follow the below steps to achieve SSRS report migration from one server to another.</p>



<h3 class="wp-block-heading">Step 1: Select the Source</h3>



<p class="">Choose your source SSRS server or a <code>.SRMW</code> file created from a previous export.</p>



<figure class="wp-block-image size-full"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/select-source.png?ssl=1"><img loading="lazy" decoding="async" width="593" height="493" data-attachment-id="8662" data-permalink="https://azureops.org/articles/ssrs-report-migration/select-source/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/select-source.png?fit=593%2C493&amp;ssl=1" data-orig-size="593,493" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="select-source" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/select-source.png?fit=300%2C249&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/select-source.png?fit=593%2C493&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/select-source.png?fit=593%2C493&amp;ssl=1" alt="SSRS report migration" class="wp-image-8662" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/select-source.png?w=593&amp;ssl=1 593w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/select-source.png?resize=300%2C249&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/select-source.png?resize=450%2C374&amp;ssl=1 450w" sizes="auto, (max-width: 593px) 100vw, 593px" /></a></figure>



<h3 class="wp-block-heading">Step 2: Select the Target</h3>



<p class="">Provide connection details for the destination SSRS server. You can migrate to a different server, or a different folder on the same server.</p>



<figure class="wp-block-image size-full"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/select-target.png?ssl=1"><img loading="lazy" decoding="async" width="596" height="492" data-attachment-id="8663" data-permalink="https://azureops.org/articles/ssrs-report-migration/select-target-2/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/select-target.png?fit=596%2C492&amp;ssl=1" data-orig-size="596,492" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="select-target" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/select-target.png?fit=300%2C248&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/select-target.png?fit=596%2C492&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/select-target.png?fit=596%2C492&amp;ssl=1" alt="ssrs report migration" class="wp-image-8663" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/select-target.png?w=596&amp;ssl=1 596w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/select-target.png?resize=300%2C248&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/select-target.png?resize=450%2C371&amp;ssl=1 450w" sizes="auto, (max-width: 596px) 100vw, 596px" /></a></figure>



<h3 class="wp-block-heading">Step 3: Choose Report Items to Migrate</h3>



<p class="">Select specific folders, reports, datasets, and data sources using a tree view. Filters and checkboxes make large-scale selection easy.</p>



<figure class="wp-block-image size-full"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/image-6.png?ssl=1"><img loading="lazy" decoding="async" width="597" height="500" data-attachment-id="9051" data-permalink="https://azureops.org/articles/ssrs-report-migration/image-44/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/image-6.png?fit=597%2C500&amp;ssl=1" data-orig-size="597,500" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/image-6.png?fit=300%2C251&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/image-6.png?fit=597%2C500&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/image-6.png?fit=597%2C500&amp;ssl=1" alt="" class="wp-image-9051" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/image-6.png?w=597&amp;ssl=1 597w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/image-6.png?resize=300%2C251&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/image-6.png?resize=450%2C377&amp;ssl=1 450w" sizes="auto, (max-width: 597px) 100vw, 597px" /></a></figure>



<h3 class="wp-block-heading">Step 4: Update Data Source Connection Strings &#8211; Migrating SSRS Data Sources</h3>



<p class="">SSRS Reports Migration Wizard includes an optional step to update data source connection strings during the migration process. This is particularly useful when migrating reports and datasets from a source server to a target server that uses different connection details.</p>



<h4 class="wp-block-heading">Fetch Data Sources</h4>



<p class="">On this screen, click the&nbsp;<strong>Fetch Data Sources</strong>&nbsp;button. The wizard will scan the selected SSRS items (from the previous screen) and populate a grid with all connections that can be updated.</p>



<p class="">Each row represents a unique connection used by your reports or shared data sources.</p>



<figure class="wp-block-image size-full is-resized"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/fetch-data-sources.jpg?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="593" height="496" data-attachment-id="9033" data-permalink="https://azureops.org/articles/ssrs-report-migration/image-border-editor-https-www-tuxpi-com-photo-effects-borders-6/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/fetch-data-sources.jpg?fit=593%2C496&amp;ssl=1" data-orig-size="593,496" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;Image Border Editor: https://www.tuxpi.com/photo-effects/borders&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="Image Border Editor: https://www.tuxpi.com/photo-effects/borders" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/fetch-data-sources.jpg?fit=300%2C251&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/fetch-data-sources.jpg?fit=593%2C496&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/fetch-data-sources.jpg?resize=593%2C496&#038;ssl=1" alt="" class="wp-image-9033" style="width:597px;height:auto" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/fetch-data-sources.jpg?w=593&amp;ssl=1 593w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/fetch-data-sources.jpg?resize=300%2C251&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/fetch-data-sources.jpg?resize=450%2C376&amp;ssl=1 450w" sizes="auto, (max-width: 593px) 100vw, 593px" /></a></figure>



<h4 class="wp-block-heading">View and Manage Connections</h4>



<p class="">The grid displays the Extension, Connection String, and Credential Retrieval method for each data source. Click the&nbsp;<strong>Edit</strong>&nbsp;link in the&nbsp;<strong>Manage</strong>&nbsp;column, which allows you to modify the connection.</p>



<p class=""><strong>Convert to shared data sources if connection exists</strong>&nbsp;&#8211; If this option is selected, the wizard will attempt to convert embedded data sources in reports to shared data sources during deployment, provided a shared data source with the same connection details is available in the selected SSRS items for deployment.</p>



<h4 class="wp-block-heading">Update Properties</h4>



<p class="">When you click&nbsp;<strong>Edit</strong>, a new dialog box appears (labeled “Manage Connection Properties”). Here you can:</p>



<ul class="wp-block-list">
<li class="">Review the Shared Data Source(s) using this connection and Report(s) using this connection as an embedded data source.</li>



<li class="">Modify the Connection String.</li>



<li class="">Specify Credentials (e.g., Windows credentials or a user name and password) under “Log into the data source”.</li>



<li class="">Click&nbsp;<strong>Save</strong>&nbsp;to apply the changes.</li>
</ul>



<figure class="wp-block-image size-full"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/update-connection-string-2.png?ssl=1"><img loading="lazy" decoding="async" width="657" height="707" data-attachment-id="8870" data-permalink="https://azureops.org/articles/ssrs-report-migration/update-connection-string-3/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/update-connection-string-2.png?fit=657%2C707&amp;ssl=1" data-orig-size="657,707" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="update-connection-string" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/update-connection-string-2.png?fit=279%2C300&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/update-connection-string-2.png?fit=657%2C707&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/update-connection-string-2.png?fit=657%2C707&amp;ssl=1" alt="" class="wp-image-8870" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/update-connection-string-2.png?w=657&amp;ssl=1 657w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/update-connection-string-2.png?resize=279%2C300&amp;ssl=1 279w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/update-connection-string-2.png?resize=576%2C620&amp;ssl=1 576w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/update-connection-string-2.png?resize=450%2C484&amp;ssl=1 450w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/update-connection-string-2.png?resize=600%2C646&amp;ssl=1 600w" sizes="auto, (max-width: 657px) 100vw, 657px" /></a></figure>



<h4 class="wp-block-heading" id="important-notes">Important Notes</h4>



<ul class="wp-block-list">
<li class="">The wizard cannot retrieve passwords from embedded or shared data sources on the source report server. The wizard will guide you to convert them ot shared data sources and provide credentials.</li>



<li class="">The&nbsp;<em>Dependent Objects</em>&nbsp;shown in the grid are those that have a connection embedded within them. These objects are directly using this connection.</li>



<li class="">The changes you make are&nbsp;<strong>not committed to the target server</strong>&nbsp;until the wizard completes the migration.</li>



<li class="">If no connections are found for the selected items, a message box will inform you that there are no connections available for update.</li>
</ul>



<h3 class="wp-block-heading">Step 5: Review Changes</h3>



<p class="">The wizard shows a migration summary with new, changed, or skipped items. You can export this list or proceed with the migration.</p>



<figure class="wp-block-image size-full"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/review.jpg?ssl=1"><img loading="lazy" decoding="async" width="599" height="499" data-attachment-id="8838" data-permalink="https://azureops.org/articles/ssrs-report-migration/image-border-editor-https-www-tuxpi-com-photo-effects-borders-3/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/review.jpg?fit=599%2C499&amp;ssl=1" data-orig-size="599,499" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;Image Border Editor: https://www.tuxpi.com/photo-effects/borders&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Image Border Editor: https://www.tuxpi.com/photo-effects/borders" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/review.jpg?fit=300%2C250&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/review.jpg?fit=599%2C499&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/review.jpg?fit=599%2C499&amp;ssl=1" alt="" class="wp-image-8838" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/review.jpg?w=599&amp;ssl=1 599w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/review.jpg?resize=300%2C250&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/review.jpg?resize=450%2C375&amp;ssl=1 450w" sizes="auto, (max-width: 599px) 100vw, 599px" /></a></figure>



<h3 class="wp-block-heading">Step 6: Finish and Validate</h3>



<p class="">Once migration is complete, a final summary screen shows migrated item counts and logs. You can rerun this process anytime.</p>



<figure class="wp-block-image size-full"><a href="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/finish.jpg?ssl=1"><img loading="lazy" decoding="async" width="596" height="495" data-attachment-id="8837" data-permalink="https://azureops.org/articles/ssrs-report-migration/image-border-editor-https-www-tuxpi-com-photo-effects-borders-2/" data-orig-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/finish.jpg?fit=596%2C495&amp;ssl=1" data-orig-size="596,495" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;Image Border Editor: https://www.tuxpi.com/photo-effects/borders&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Image Border Editor: https://www.tuxpi.com/photo-effects/borders" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/finish.jpg?fit=300%2C249&amp;ssl=1" data-large-file="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/finish.jpg?fit=596%2C495&amp;ssl=1" src="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/finish.jpg?fit=596%2C495&amp;ssl=1" alt="" class="wp-image-8837" srcset="https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/finish.jpg?w=596&amp;ssl=1 596w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/finish.jpg?resize=300%2C249&amp;ssl=1 300w, https://i0.wp.com/azureops.org/wp-content/uploads/2025/06/finish.jpg?resize=450%2C374&amp;ssl=1 450w" sizes="auto, (max-width: 596px) 100vw, 596px" /></a></figure>



<h2 class="wp-block-heading" id="how-to-install">Installation</h2>



<p class="">SSRS Reports Migration Wizard can be installed as an extension to:</p>



<p class="">1.&nbsp;<a href="https://marketplace.visualstudio.com/items?itemName=AzureOps.srmw1719" target="_blank" rel="noreferrer noopener">Visual Studio 2017</a>,&nbsp;<a href="https://marketplace.visualstudio.com/items?itemName=AzureOps.srmw1719" target="_blank" rel="noreferrer noopener">Visual Studio 2019</a>, <a href="https://marketplace.visualstudio.com/items?itemName=AzureOps.srmw2022" target="_blank" rel="noreferrer noopener">Visual Studio 2022</a> &amp;&nbsp;<a href="https://marketplace.visualstudio.com/items?itemName=AzureOps.srmw2022" target="_blank" rel="noreferrer noopener">Visual Studio 2026</a>.<br>2. SSMS 18, 19, 20, 21, 22<br>3. Standalone tool.</p>



<h2 class="wp-block-heading">Standalone Usage</h2>



<p class="">Don’t use Visual Studio? You can still run the wizard as a standalone tool:</p>



<ol class="wp-block-list">
<li class="">Download the <code>.vsix</code> from <a class="" href="https://marketplace.visualstudio.com/items?itemName=AzureOps.ssrsmigrationwizard">here</a>.</li>



<li class="">Rename the <code>.vsix</code> to <code>.zip</code> and extract it.</li>



<li class="">Launch <code>SSRS.Reports.Migration.Wizard.exe</code>.</li>
</ol>



<p class="has-background" style="background-color:#bcefca"><strong>Pro tips:</strong><br>1. <a href="https://azureops.org/articles/download-all-ssrs-reports-from-report-server/" target="_blank" rel="noreferrer noopener">Learn </a>how to export all SSRS objects from the report server using SSRS Reports Migration Wizard.</p>
<p>The post <a href="https://azureops.org/articles/ssrs-report-migration/">How to Migrate SSRS Reports from One Server to Another (Step-by-Step)</a> appeared first on <a href="https://azureops.org">AzureOps</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8658</post-id>	</item>
	</channel>
</rss>
