<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Girl</title>
        <link>https://virgool.io/feed/@A_girl</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-07-06 13:41:20</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/250950/avatar/obd34O.jpeg?height=120&amp;width=120</url>
            <title>Girl</title>
            <link>https://virgool.io/@A_girl</link>
        </image>

                    <item>
                <title>What&#039;s New in ADO.NET - موارد جدید</title>
                <link>https://virgool.io/@A_girl/whats-new-in-adonet-%D9%85%D9%88%D8%A7%D8%B1%D8%AF-%D8%AC%D8%AF%DB%8C%D8%AF-qj7j5eizdak9</link>
                <description>ویژگی (feature) های زیر در ADO.NET در .NET Framework 4.5 جدید هستند.کلمات کلیدی کانکشن استرینگ ConnectRetryCount و ConnectRetryInterval ا (ConnectionString) به شما امکان می دهند ویژگی انعطاف پذیری اتصال IDE را کنترل کنید.پشتیبانی جریانی (Streaming Support) از SQL Server به یک اپلیکیشن  سناریوهایی را ساپورت می‌کند که در آن داده‌های روی سرور بدون ساختار هستند. برای اطلاعات بیشتر به SqlClient Streaming Support مراجعه کنید.پشتیبانی برای برنامه نویسی آسنکرون اضافه شده است. برای اطلاعات بیشتر به Asynchronous Programming مراجعه کنید.خرابی های اتصال (connection failure ها ) اکنون در لاگِ ایونت های extend شده ثبت می شوند. برای اطلاعات بیشتر Data Tracing in ADO.NET  را ببینید.ا SqlClient اکنون قابلیت دسترسی بالا SQL Server (ا high availability)، قابلیت بازیابی فاجعه (ا disaster recovery feature)، AlwaysOn  را ساپورت می کند. برای اطلاعات بیشتر به لینک qlClient Support for High Availability, Disaster Recovery مراجعه کنید.یک رمز عبور (password) می تواند به عنوان SecureString هنگام استفاده از احراز هویت SQL Server (ا SQL Server Authentication) ارسال شود: SqlCredentialوقتی TrustServerCertificate نادرست است و Encrypt درست است، نام سرور (یا آدرس IP) در  SQL Server SSL Certificate باید دقیقاً با نام سرور (یا آدرس IP) مشخص شده در کانکشن استرینگ (Connection String) مطابقت داشته باشد.اگر این تغییر باعث شود که یک existing application (برنامه ای که از قبل موجود است) دیگر متصل نشود، می‌توانید برنامه را با استفاده از یکی از موارد زیر درست کنید:                                                                                                                                                                                                               1- گواهینامه (certificate) ای صادر کنید که نام کوتاه را در قسمت Common Name (CN) یا Subject Alternative Name (SAN) مشخص کند.2-  یک نام مستعار اضافه کنید که نام کوتاه را به نام دامنه مناسب نشان دهد.3-از نام دامنه مناسب در connection string  استفاده کنید.ا SqlClient از Extended Protection پشتیبانی می کند. برای اطلاعات بیشتر در مورد  Extended Protection ، به Connecting to the Database Engine Using Extended Protection مراجعه کنید.ا SqlClient از اتصالات به پایگاه داده های LocalDB پشتیبانی می کند. برای اطلاعات بیشتر، به SqlClient Support for LocalDB مراجعه کنید.ا Type System Version=SQL Server 2012; مقدار جدیدی برای ارسال به کانکشن پراپرتی Type System Version است. Type System Version=Latest;  اکنون منسوخ شده است و معادل Type System Version=SQL Server 2008; شده است. برای اطلاعات بیشتر، ConnectionString را ببینید.ا SqlClient پشتیبانی اضافی برای ستون های sparse را فراهم می کند، ویژگی که در SQL Server 2008 اضافه شده است. اگر برنامه شما از قبل به داده‌های جدولی دسترسی دارد که از ستون‌های sparse استفاده می‌کند، باید شاهد افزایش عملکرد (performance) باشید. ستون IsColumnSet ،از GetSchemaTable نشان می دهد که آیا یک ستون یک ستون sparse که عضوی از یک  column set هست، می باشد یا نه. ا GetSchema نشان می دهد که آیا یک ستون یک ستون sparse (پراکنده) هست یا نه (برای اطلاعات بیشتر به SQL Server Schema Collections مراجعه کنید). برای اطلاعات بیشتر در مورد ستون های sparse ، به Use Sparse Columns مراجعه کنید.اسمبلی Microsoft.SqlServer.Types.dll که شامل انواع داده های spatial است، از نسخه 10.0 به نسخه 11.0 ارتقا یافته است. برنامه هایی که به این اسمبلی رفرنس میدهند می کنند ممکن است شکست بخورند (fail شوند). برای اطلاعات بیشتر، به Breaking Changes to Database Engine Features مراجعه کنید.ADO.NET Entity Frameworkا NET Framework 4.5، ا APIهایی را اضافه می کند که هنگام کار با Entity Framework 5.0 سناریوهای جدیدی را در اختیارتان قرار می دهد. برای اطلاعات بیشتر در مورد improvement ها و ویژگی هایی که به Entity Framework 5.0 اضافه شده است، به topic  های زیر مراجعه کنید.What’s NewEntity Framework Releases and Versioning</description>
                <category>Girl</category>
                <author>Girl</author>
                <pubDate>Fri, 22 Jul 2022 09:33:01 +0430</pubDate>
            </item>
                    <item>
                <title>ADO.NET - مقدمه کلی</title>
                <link>https://virgool.io/@A_girl/adonet-%D9%85%D9%82%D8%AF%D9%85%D9%87-%DA%A9%D9%84%DB%8C-kj2fbsppacyk</link>
                <description>ا ADO.NET مجموعه ای از کلاس ها است که سرویس های دسترسی به داده ها (data access services) را برای برنامه نویسان دات نت فریم ورک ارائه می دهد. ADO.NET مجموعه ای غنی از کامپوننت ها را برای ایجاد برنامه های توزیع شده (distributed) و اشتراک گذاری داده (data-sharing application) ارائه می دهد. این بخشی جدایی ناپذیر از دات نت فریم ورک است که دسترسی به داده های رابطه ای (relational data)، XML و application data را فراهم می کند. ADO.NET  انواع نیازهای development رو ساپورت می کند، از جمله ایجاد دیتابیس کلاینت های front-end و بیزینس آبجکت های سطح متوسط (middle tier) که توسط اپلیکیشن ها، tool ها ، زبان ها یا مرورگرهای اینترنتی (Internet browser ها) استفاده می شوند.موارد جدید در ADO.NETفیچرهای جدیدی رو در ADO.NET معرفی می کند.مرور کلی بر ADO.NETمقدمه ای بر طراحی (design) و اجزای (component های) ADO.NET ارائه می دهد.ا Entity Framework- نحوه ایجاد اپلیکیشن ها با استفاده از Entity Framework را شرح می دهد.امنیت اپلیکیشن های ADO.NETشیوه های کدنویسی ایمن (secure coding practices) را هنگام استفاده از ADO.NET شرح می دهد.ا Data type Mapping در ADO.NETا Data type mapping  بین دیتا تایپ های دات نت فریمورک (dot.NET Framework data types) و دیتا پرووایدر های دات نت فریمورک (NET Framework data providers) را توضیح می دهد.  ا DataSets, DataTables, and DataViewsنحوه ایجاد و استفاده از DataSet ها ،  انواع دیتاست ها ، DataTable ها و DataView ها را شرح می دهد.ا LINQ to DataSetاطلاعاتی در مورد LINQ to DataSet، همراه با مثال ارائه می دهد.بازیابی (retrieving) و اصلاح داده ها (modifying) در ADO.NETنحوه اتصال به data source و نحوه بازیابی و اصلاح داده ها با استفاده از Commands، DataReaders و DataAdapters را شرح می دهد.ا SQL Server و ADO.NETنحوه کار با feature ها (ویژگی ها) و عملکردهایی (functionality هایی) که مختص SQL Server هستند را شرح می دهد.اوراکل (Oracle) و ADO.NETویژگی‌ها (feature )ا و رفتارهایی (behavior ) را توصیف می‌کند که مختص ارائه‌دهنده داده‌های .NET Framework  (ا dot Net Framework Provider)برای Oracle است. </description>
                <category>Girl</category>
                <author>Girl</author>
                <pubDate>Wed, 20 Jul 2022 16:21:19 +0430</pubDate>
            </item>
                    <item>
                <title>ا CTE در SQL Server چیست؟ - CTE in SQL Server</title>
                <link>https://virgool.io/@A_girl/%D8%A7-cte-%D8%AF%D8%B1-sql-server-%DA%86%DB%8C%D8%B3%D8%AA-cte-in-sql-server-oxbmhjbnuw1k</link>
                <description>یک مجموعه نتایج با نام موقت را مشخص می کند که به عنوان &quot;عبارت جدول مشترک&quot;  (CTE - Common Table Expression)  شناخته می شود. این از یک کوئری ساده مشتق شده و در محدوده اجرای یک استیتمنت (statement) ِ SELECT، INSERT، UPDATE، DELETE یا MERGE تعریف شده است. این قسمت همچنین می تواند در دستور CREATE VIEW به عنوان بخشی از دستور SELECT تعریف کننده آن استفاده شود. یک CTE می تواند شامل رفرنس به خودش باشد. این به عنوان یک CTE بازگشتی نامیده می شود. نوشتن کوئری های طولانی حاوی logic ِ  گسترده امری عادی است. می تواند شامل join های زیاد، سطوح مختلف aggregation، و فیلتر کردن در هر تعداد جدول باشد. در برخی موارد، یک مجموعه نتیجه را نمی توان با یک کوئری ساده به تنهایی (SELECT x FROM y WHERE z) به دست آورد و به مجموعه ای از کوئری ها نیاز دارد تا به هم چسبانده شوند. علاوه بر این، برای کوئری های پیچیده تر، بهترین راه برای نوشتن یک کوئری، اغلب تقسیم آن به مراحل منطقی و ساختن آن قطعه به قطعه است.به طور سنتی،sub-query ها روشی برای جداسازی logic در یک  SQL statement است که می‌توان آن را دوباره به کوئری اصلی که می‌خواهید به صورت تدریجی ایجاد کنید، اضافه کرد. این می تواند موثر باشد، اما خواندن و درک آن برای دیگران نیز دشوار است.ا  CTE یک رویکرد (approach) منطقی و خوانا برای نوشتن کوئری ارائه می دهد که می تواند کوئری های پیچیده را به یک سری مراحل منطقی تقسیم کند، به بهبود خوانایی کوئری ها کمک کند و به مجموعه نتایج پیچیده تری دست یابد.کوئری های زیر از پایگاه داده AdventureWorks مایکروسافت، علاوه بر SQL Server Management Studio و Microsoft SQL Server Developer Edition استفاده می کنند.آخرین نسخه این نرم افزار را می توانید به صورت رایگان از لینک های زیر دانلود کنید:SQL Server Developer EditionSQL Server Management StudioAdventureWorks DW Databaseتعریف CTEطبق تعریف خالص، یک CTE یک «مجموعه نتایج نام‌گذاری موقت»-temporary named result set- است. در عمل، یک CTE مجموعه ای از نتایج است که برای دامنه اجرای یک دستور SELECT، INSERT، UPDATE، DELETE یا MERGE در حافظه باقی می ماند.بیایید این را تجزیه کنیم و نگاهی به syntax بیاندازیم تا درک بهتری از معنای این و چرایی مفید بودن آن داشته باشیم. سینتکس اصلی یک CTE به شرح زیر است:WITH &lt;common_table_expression&gt; ([column names])
AS
(
   &lt;cte_query_definition&gt;
)
&lt;operation&gt; عبارت WITH به SQL Server می گوید که ما در شرف تعریف (declare کردن) یک CTE هستیم، و &lt;common_table_expression&gt; مشخص می کنه چگونه مجموعه نتایج را برای رفرنس دادن های بعدا نامگذاری می کنیم. از این رو، یک &quot;مجموعه نتایج نامگذاری شده&quot;.[ا column names] جایی است که می‌توانید نام مستعار ستون‌هایی را که از CTE بیرون می‌آیند، نامگذاری کنید. این یک بخش اختیاری از syntax است، و من اغلب فقط ستونی را که در قسمت &lt;cte_query_definition&gt; از سینتکس است نامگذاری می‌کنم.ا &lt;cte_query_definition&gt; همیشه یک عبارت SELECT است. اینجاست که ما مجموعه نتایج (result set) خود را تعریف می کنیم. شما می توانید این را به عنوان یک جدول موقت در نظر بگیرید که می تواند در یک عبارت FROM یا JOIN مانند هر جدول معمولی دیگری ارجاع داده شود. با این حال، تفاوت های کلیدی بین CTE و جدول موقت وجود دارد که بعدا توضیح داده خواهد شد. همچنین می توانید ستون های خود را در این بخش alias کنید تا بعداً به آنها رفرنس داده شود.ا &lt;operation&gt; جایی است که ما actual execution خود را انجام می دهیم و به CTE ارجاع می دهیم. همانطور که قبلا ذکر شد، این می تواند SELECT، INSERT، UPDATE، DELETE یا MERGE T-SQL باشد. در زیر به چند نمونه از این موارد خواهیم پرداخت.بیایید نگاهی به یک مثال CTE برای هدایت این خانه بیندازیم:WITH Simple_CTE
AS (
   SELECT dd.CalendarYear
      ,fs.OrderDateKey
      ,fs.ProductKey
      ,fs.OrderQuantity * fs.UnitPrice AS TotalSale
      ,dc.FirstName
      ,dc.LastName
   FROM [dbo].[FactInternetSales] fs
   INNER JOIN [dbo].[DimCustomer] dc ON dc.CustomerKey = fs.CustomerKey
   INNER JOIN [dbo].[DimDate] dd ON dd.DateKey = fs.OrderDateKey
   )
SELECT *
FROM Simple_CTEدر مثال بالا، ما یک CTE ایجاد کرده‌ایم که حاوی چند join ، لیست ستون‌های انتخاب شده خاص، و یک ستون مشتق شده «TotalSale» است. عملیات ما در این مثال فقط یک دستور SELECT دیگر است، فقط برای اینکه نشان دهیم چگونه می توان از CTE به ساده ترین شکل استفاده کرد.ا CTE با SELECTبیایید syntax را کمی جلوتر ببریم. اغلب، ممکن است متوجه شوید که نیاز به انجام یک aggregation چند لایه دارید (multi-tiered aggregation). یعنی aggregation ِ یک aggregation. ا CTE ها می توانند راهی عالی برای نوشتن این نوع کوئری به روشی خوانا باشند.WITH Sum_OrderQuantity_CTE
AS (
SELECT ProductKey
,EnglishMonthName
,SUM(OrderQuantity) AS TotalOrdersByMonth
FROM [dbo].[FactInternetSales] fs
INNER JOIN [dbo].[DimDate] dd ON dd.DateKey = fs.OrderDateKey
GROUP BY ProductKey, EnglishMonthName

)
SELECT ProductKey, AVG(TotalOrdersByMonth) AS &#039;Average Total Orders By Month&#039;
FROM Sum_OrderQuantity_CTE
GROUP BY ProductKey
ORDER BY ProductKeyدر این کد SQL، ما مجموع OrderQuantity را بر اساس محصول در ماه می گیریم (product per month) تا ببینیم چه مقدار از هر کالا در ماه فروخته شده است. سپس، ما این مجموع را به طور میانگین محاسبه می کنیم تا ببینیم برای هر محصول، میانگین ماهانه مقدار فروخته شده چقدر است.اCTE با INSERTبرای ساختن مثال قبلی، به جای select داده‌های انبوه، می‌توانیم یک عبارت INSERT را با subquery جفت کنیم تا داده‌ها را در جدول جدید وارد کنیم. ابتدا این جدول را بسازید تا جدولی برای insert بهش داشته باشیم:CREATE TABLE [dbo].[TestTable](
   [CalendarYear] [smallint] NOT NULL,
   [OrderDateKey] [int] NOT NULL,
   [ProductKey] [int] NOT NULL,
   [TotalSale] [money] NULL,
   [FirstName] [nvarchar](50) NULL,
   [LastName] [nvarchar](50) NULL
)سپس، در مثال زیر می‌توانیم از یک CTE برای insert در این جدول استفاده کنیم.WITH Simple_CTE
AS (
   SELECT dd.CalendarYear
      ,fs.OrderDateKey
      ,fs.ProductKey
      ,fs.OrderQuantity * fs.UnitPrice AS TotalSale
      ,dc.FirstName
      ,dc.LastName
   FROM [dbo].[FactInternetSales] fs
   INNER JOIN [dbo].[DimCustomer] dc ON dc.CustomerKey = fs.CustomerKey
   INNER JOIN [dbo].[DimDate] dd ON dd.DateKey = fs.OrderDateKey
   )
 
INSERT INTO dbo.TestTable
SELECT * FROM Simple_CTEنکته: ما این را به‌عنوان یک SELECT * برای سادگی نوشته‌ایم، اما اغلب باید نام هر ستون را صریحاً نامگذاری کنید (در صورت تغییر schema در آینده).اCTE با updateمشابه یک CTE با DELETE، می‌توانیم یک جدول را با استفاده از روش مشابه به‌روزرسانی کنیم.  ابتدا بیایید یک جدول back up ایجاد کنیم تا جدول واقعی را به روز نکنیم:SELECT * 
INTO dbo.DimCustomerBakUpdate 
FROM DimCustomerدر مرحله بعد، می توانیم این جدول را update کنیم. در مثال زیر، تمام رکوردهایی را که AddressLine2،  NULL است، همانطور که در عبارت WHERE مشخص شده است، update می‌کنیم تا به جای آن یک string خالی باشد.WITH Update_CTE
AS (
   SELECT *
   FROM dbo.DimCustomerBakUpdate
   WHERE AddressLine2 IS NULL
   )
UPDATE Update_CTE
SET AddressLine2 = &#039;&#039;می‌توانید نتیجه را ببینید - ما یک مجموعه نتیجه از همه رکوردها ایجاد کردیم که در آن AddressLine2 ، null است، و سپس یک به‌روزرسانی را برای مجموعه نتایج خاص اعمال کردیم. باز هم، این یک مثال ساده است که به منظور نشان دادن قابلیت‌های CTE است.ا CTE با DELETEعلاوه بر select، insert و update  داده ها، می توانید از CTE برای حذف داده ها (delete) از جدول استفاده کنید. DELETE ها مستلزم این است که شما فقط از یک جدول در CTE خود استفاده کرده باشید، بنابراین نمی توانید از هیچ join  ای استفاده کنید، در غیر این صورت با خطا مواجه خواهید شد.درست مانند update ، بیایید یک جدول backup دیگر برای حذف رکوردها ایجاد کنیم:SELECT * 
INTO dbo.DimCustomerBak 
FROM DimCustomerاکنون می‌توانیم با استفاده از یک CTE از این جدول داده حذف کنیم. در این مثال، ما تمام رکوردهایی که AddressLine2، برابر با null  است را حذف می کنیم.WITH MissingAddress_CTE
AS (
   SELECT *
   FROM dbo.DimCustomerBak
   WHERE AddressLine2 IS NULL
   )
DELETE
FROM MissingAddress_CTEوقتی دوباره از جدول select می کنیم، می بینید که دیگر هیچ رکوردی با NULL در ستون AddressLine2 وجود ندارد.چندین CTE در یک کوئریدر نهایت، شما محدود به نوشتن یک CTE در یک کوئری نیستید. می توانید هر تعداد که می خواهید بنویسید و با کاما از هم جدا کنید:WITH Sales_Cust_Join_CTE
AS (
   SELECT fs.OrderDateKey
      ,fs.ProductKey
      ,fs.OrderQuantity * fs.UnitPrice AS TotalSale
      ,dc.FirstName
      ,dc.LastName
   FROM [dbo].[FactInternetSales] fs
   INNER JOIN [dbo].[DimCustomer] dc ON dc.CustomerKey = fs.CustomerKey
   )
   ,Date_CTE
AS (
   SELECT DateKey
      ,CalendarYear
   FROM [dbo].[DimDate]
   )
SELECT CalendarYear
   ,ProductKey
   ,SUM(TotalSale) AS TotalSales
FROM Sales_Cust_Join_CTE
INNER JOIN Date_CTE ON Date_CTE.DateKey = Sales_Cust_Join_CTE.OrderDateKey
GROUP BY CalendarYear
   ,ProductKey
ORDER BY CalendarYear ASC
   ,TotalSales DESCدر این مثال، ما دو CTE با تعدادی join، logic و انتخاب تنها چند ستون خاص ایجاد می کنیم. در عملیات نهایی خود، CTE ها را به یکدیگر join می کنیم و یک aggregate را تشکیل می دهیم تا کل فروش هر محصول را بر اساس سال تقویمی نشان دهیم.دقت کنید، اگر از CTE های زیادی استفاده کنید، خواندن کد می تواند چالش برانگیزتر شود. بنابراین، هرچند آنها می توانند یک ابزار عالی باشند، سعی کنید در استفاده از آنها زیاده روی نکنید.چه زمانی باید از CTE استفاده کرد و چه زمانی نباید استفاده کرداگرچه CTE ها روشی عالی برای نوشتن کدهای تمیز تر هستند، اما نباید در هر سناریو از آنها استفاده کرد.مثلا، یک محدودیت عمده این است که یک CTE به scope ِ یک single execution  (محدوده یک اجرا) محدود می شود. معنی آن در عمل این است که اگر نیاز به انجام بیش از یک عملیات با این مجموعه نتایج دارید، باید چندین بار CTE را declare کنید. این کارایی ندارد زیرا ما چندین بار کار CTE را انجام می دهیم.در این سناریو احتمالاً بهتر است از یک temp table استفاده کنید</description>
                <category>Girl</category>
                <author>Girl</author>
                <pubDate>Tue, 21 Jun 2022 12:10:55 +0430</pubDate>
            </item>
                    <item>
                <title>جدول مشتق شده (derived table) در SQL Server چیست؟</title>
                <link>https://virgool.io/@A_girl/%D8%AC%D8%AF%D9%88%D9%84-%D9%85%D8%B4%D8%AA%D9%82-%D8%B4%D8%AF%D9%87-derived-table-%D8%AF%D8%B1-sql-server-%DA%86%DB%8C%D8%B3%D8%AA-zkmv4trn7uz6</link>
                <description>جدول مشتق شده یک table expression است که در قسمت FROM یک کوئری ظاهر می شود. درواقع یک subquery است که درون یک clause FROM قرار گرفته است. به دلیل قرار گرفتن در یک عبارت FROM، مجموعه نتایج subquery را می توان مشابه جدول SQL Server استفاده کرد.شما می توانید جداول مشتق شده را زمانی اعمال کنید که استفاده از نام مستعار ستون (column aliases) امکان پذیر نباشد زیرا قبل از اینکه نام مستعار مشخص شود، بند دیگری توسط SQL translator پردازش می شود.ا subquery در قسمت FROM باید یک نام داشته باشد. یکی از دلایل گنجاندن یک جدول مشتق شده در یک outer query، ساده کردن outer query است.  چون می‌توانید پیچیدگی یک کوئری را در یک جدول مشتق شده در یک عبارت FROM مدفون کنید و به مقادیر ستون subquery در جدول مشتق شده مراجعه کنید.از آنجایی که می توانید با جداول مشتق شده مانند جداول معمولی  SQL Server رفتار کنید، می توانید دو یا چند جدول مشتق شده را join کنید. همچنین، می توانید کوئری هایی را که به جدول مشتق شده در داخل یکدیگر ارجاع می دهند، قرار دهید. یک نمونه کد در این بخش از آموزش این قابلیت جدول مشتق شده را برای شمارش رکوردهای تکراری در یک منبع داده نشان می دهد.ایجاد یک جدول مشتق شده پایه (Creating a Basic Derived Table)کوئری زیر به عنوان subquery برای یک جدول مشتق شده عمل می کند. اغلب ایده خوبی است که قبل از استفاده از T-SQL برای subquery در یک جدول مشتق شده، مجموعه نتایج یک query را بررسی کنید. کوئری زیر مقادیر سه ستون جدول CountryRegion در پایگاه داده AdventureWorks2014 را فهرست می کند. هر ردیف در جدول مربوط به یک کشور است. ستون CountryRegionCode کلید اصلی (primary key) جدول CountryRegion است. این code یک مقدار فیلد نوع داده  short nvarchar است که یک کشور را نشان می دهد. می توانید آن را به عنوان مخفف نام کشور در نظر بگیرید. ستون Name نام کامل کشور در یک ردیف در جدول است. ستون ModifiedDate یک فیلد datetime (تاریخ) است که نشان دهنده آخرین زمانی است که ردیف وارد شده یا تغییر کرده است، هر کدام که جدیدترین باشد.-- columns of data from CountryRegion table in Person schema
SELECT
  [CountryRegionCode],
  [Name],
  [ModifiedDate]
FROM [AdventureWorks2014].[Person].[CountryRegion]در اینجا گزیده ای از ده ردیف اول در مجموعه نتایج از کوئری قبلی است. از گوشه سمت راست نمایشگر توجه کنید که دویست و سی و هشت ردیف در مجموعه نتایج کامل وجود دارد:بلوک کد  T-SQL بعدی یک مثال جدول مشتق شده بسیار ابتدایی است. درونی ترین کوئری در اسکریپت زیر شامل کوئری برای سه ستون از جدول CountryRegion در عبارت FROM آن است. subquery در قسمت FROM دارای نام my_derived_table است. کوئری outer-most (بیرونی ترین کوئری) از جدول مشتق شده به عنوان منبع خود استفاده می کند. علاوه بر این، سه عملیات (operation) خاص انجام می شود.ابتدا ستونی با نام Country Alphabet index فهرست موارد SELECT را هدایت می کند. این یک ستون محاسبه شده (computed column) بر اساس فیلد Name از درونی ترین کوئری (inner-most) است. تابع substring اولین حرف از مقدار ستون Name را از inner-most کوئری استخراج (extract) می کند.دوم، آیتم SELECT بعدی نام مستعار  (alias name) Country Name را به ستون Name از درونی ترین پرس و جو اختصاص می دهد. هنگامی که مجموعه نتایج با یک SELECT نمایش داده می شود،  با نام مستعار آن ظاهر می شود. با این حال، همچنان باید به ستون Name از درونی ترین کوئری با نام نامستعار(un-aliased) آن در موارد لیست SELECT و همچنین WHERE و ORDER BY ارجاع دهید.سوم، بیرونی ترین کوئری نیز نتایج خود را با کاراکتر اول مقدار ستون Name از جدول مشتق شده مرتب می کند.-- country name and country region code in alphabetical order 
-- alphabetized by country name
SELECT
  SUBSTRING(name, 1, 1) [Country Alphabet index],
  name [Country Name],
  [CountryRegionCode]
FROM ( -- columns of data from CountryRegion table in Person schema
      SELECT
         [CountryRegionCode],
        [Name],
        [ModifiedDate]
      FROM [AdventureWorks2014].[Person].[CountryRegion]
     ) my_derived_table
ORDER BY LEFT(name, 1)در اینجا گزیده ای است که ده ردیف اول مجموعه نتیجه را از اسکریپت قبلی نشان می دهد. همه ستون ها با ستون های جدول مشتق شده یکسان نیستند.ستون اول index ِ الفبای اسم کشور را دارد. مقدار این index فقط اولین حرف برای اسم یک کشور است که از طریق تابع substring استخراج می شود.ستون دوم دارای header ستونی از Country Name است که نام مستعار Name از جدول مشتق شده است.ستون سوم همان نامی است که در جدول مشتق شده است - CountryRegionCode.ستون سوم از جدول مشتق شده در بیرونی ترین کوئری فیلتر می شود. فیلتر کردن با عدم درج نام ستون ModifiedDate در بیرونی ترین کوئری انجام می شود.ترتیب سطرها در مجموعه نتایج بر اساس ORDER BY در انتهای کوئری است. توجه داشته باشید که کد T-SQL به نام مستعار - (aliased name) (Name) و نه نام نا مستعار (Country Name) (un-aliased name) در ORDER BY ارجاع می دهد.در نهایت، توجه داشته باشید که دویست و سی و هشت ردیف در مجموعه نتایج  بیرونی ترین کوئری وجود دارد. تمام سطرهای جدول مشتق شده به بیرونی ترین کوئری منتقل می شوند. اما، می‌توانید به‌صورت اختیاری از یک فیلتر در WHERE برای محدود کردن عبور سطرها از جدول مشتق‌شده به بیرونی‌ترین کوئری استفاده کنید.ا join کردن derived Table ها (Joining Derived Tables)این بخش دو جدول اضافی از پایگاه داده Adventureworks2014 را معرفی می کند. اولین مورد از این جدول ها جدول CountryRegionCurrency و دومین جدول اضافی جدول Currency است.جدول CountryRegionCurrency یک junction table بین جدول CountryRegion و Currency است.کلید اصلی جدول CountryRegionCurrency یک کلید ترکیبی بر اساس دو فیلد است: CountryRegionCode و CurrencyCode.  یادتون باشه که:                     -- ا CountryRegionCode همچنین کلید اصلی (primary key) جدول CountryRegion است.                     -- ا CurrencyCode همچنین کلید اصلی (pk) جدول Currency است.هر ردیف در جدول CountryRegion می تواند با صفر، یک یا بیش از یک ردیف در جدول Currency مطابقت داشته باشد (مچ شود).هر ردیف در جدول Currency می تواند با یک یا چند ردیف در جدول CountryRegion مطابقت داشته باشد.اسکریپت‌های T-SQL زیر تمام ردیف‌های جداول CountryRegionCurrency و Currency را فهرست می‌کنند. یک اسکریپت برای فهرست کردن ردیف‌های جدول CountryRegion در مثال قبل ظاهر می‌شود.-- columns of data from CountryRegionCurrency table in Sales schema
SELECT
  [CountryRegionCode],
  [CurrencyCode],
  [ModifiedDate]
FROM [AdventureWorks2014].[Sales].[CountryRegionCurrency]

----------------------------------------------------------------------------------

-- columns of data from Currency table in Sales schema
SELECT
  [CurrencyCode],
  [Name],
  [ModifiedDate]
FROM [AdventureWorks2014].[Sales].[Currency]در اینجا گزیده ای با ده ردیف اول از هر یک از دو کوئری قبلی آورده شده است.پنجره بالا ردیف هایی از جدول CountryRegionCurrency را نشان می دهد.پنجره پایین ردیف هایی از جدول Currency را نشان می دهد.تعداد سطرهای هر جدول در گزیده زیر نشان داده نشده است. 109 ردیف در جدول CountryRegionCurrency و 105 ردیف در جدول Currency وجود دارد.                    -- از آنجایی که 238 ردیف در جدول CountryRegion وجود دارد، این تأیید می کند که کشورهای زیادی در جدول CountryRegion بدون ارز مشابه در جدول Currency وجود دارد.                   -- به طور مشابه، از آنجایی که تعداد ردیف‌های جدول Currency کمتر از تعداد ردیف‌های جدول CountryRegionCurrency است، این تأیید می‌کند که برخی از کشورها می‌توانند بیش از یک ارز مشابه داشته باشند.پنجره بالایی مرحله قبل را در ردیف سوم و چهارم خود نشان می دهد     -- هر دو ردیف مربوط به Austria است که برای CountryRegionCode آن مقدار AT دارد.   -- ردیف سوم به Austrian Shilling (ATS) به عنوان یک ارز اشاره می کند. -- ردیف چهارم یورو (EUR) را به عنوان واحد پول نشان می دهد.اسکریپت بعدی نحوه تعیین یک inner joinبین دو جدول مشتق شده را نشان می دهد - یکی بر اساس جدول CountryRegion و دیگری بر اساس جدول CountryRegionCurrency.جدول مشتق شده با اسم مختصر cr مجموعه ای از 238 ردیف نتایج را از جدول CountryRegion برمی گرداند.جدول مشتق شده با اسم مختصر crc مجموعه ای از 109 ردیف نتایج را از جدول CountryRegionCurrency برمی گرداند.عملگر inner join و تطبیق آن بر روی کلمات کلیدی (CountryRegionCode) نشان می دهد که هر سطر در مجموعه نتایج جدول مشتق شده cr باید با هر تعداد ردیف در مجموعه نتایج جدول مشتق شده crc مطابقت داشته باشد هر زمان که مقدار CountryRegionCode در هر دو جدول یکسان باشد.از آنجایی که فقط 109 ردیف در جدول مشتق شده crc وجود دارد و هر یک از ردیف های آن با یک ردیف در جدول مشتق شده cr مطابقت دارد، مجموعه نتایج برای کوئری بیرونی شامل 109 ردیف است.-- there are 109 country-currency pairings
-- this query demonstrates an inner join with derived tables
-- some countries have more than one matching currency
SELECT
  cr.CountryRegionCode,
  cr.Name [Country Name],
  crc.CurrencyCode
FROM ( -- there are 238 country region codes
       SELECT
         [CountryRegionCode],
         [Name],
         [ModifiedDate]
       FROM [AdventureWorks2014].[Person].[CountryRegion]
     ) cr
INNER JOIN 
     ( -- there are 109 currency codes in CountryRegionCurrency
       SELECT
         [CountryRegionCode],
         [CurrencyCode],
         [ModifiedDate]
       FROM [AdventureWorks2014].[Sales].[CountryRegionCurrency]
     ) crc ON cr.CountryRegionCode = crc.CountryRegionCodeگزیده زیر ده سطر اول از بیرونی ترین مجموعه نتیجه را نشان می دهد.مجموعه نتایج دارای سه ستون بر اساس موارد لیست SELECT از کوئری بیرونی در اسکریپت قبلی است.ستون ها برای:     --- ا CountryRegionCode از جدول مشتق شده cr    --- ا Name از جدول مشتق شده cr. به این قسمت نام مستعار (alias name) Country Name اختصاص داده شده است --- ا CurrencyCode از جدول مشتق شده crcبه دلیل شامل شدن نام کشور برای مقادیر مطابق CountryRegionCode، کاربران فهرست می توانند به سرعت از یک مقدار CountryRegionCode به نام کشور مطابق آن برسند.با درج نام کشور در مجموعه نتایج، به راحتی می توان تشخیص داد که Austria و Belgium دارای چندین نوع ارز در مجموعه نتایج هستند.یکی از راه های بالقوه برای بهبود مجموعه نتایج قبلی، اضافه کردن نام ارز به عنوان یک ستون است. می‌توانید با افزودن یک left join از ردیف‌های جدول Currency به ردیف‌های جدول CountryRegionCurrency در کوئری قبلی، به این نتیجه برسید. اسکریپت زیر نحوه دستیابی به این نتیجه را با جداول مشتق شده نشان می دهد.</description>
                <category>Girl</category>
                <author>Girl</author>
                <pubDate>Tue, 21 Jun 2022 11:11:50 +0430</pubDate>
            </item>
                    <item>
                <title>جدول موقت ( Temporary Table- tempTable) در SQL چیست؟</title>
                <link>https://virgool.io/@A_girl/%D8%AC%D8%AF%D9%88%D9%84-%D9%85%D9%88%D9%82%D8%AA-temporary-table-temptable-%D8%AF%D8%B1-sql-%DA%86%DB%8C%D8%B3%D8%AA-iqtaldyv0lre</link>
                <description>جدول موقت یک جدول base است که در دیتابیس ذخیره نمی شود، اما در عوض تنها زمانی وجود دارد که database session ای که در آن ایجاد شده فعال باشد. تا حد خیلی زیادی مثل جداول دائمی هستند. temp table ها در TempDB ایجاد می شوند و به محض پایان آخرین اتصال به طور خودکار حذف می شوند.جداول موقت به ما کمک می کند تا نتایج میانی را ذخیره و پردازش کنیم.  temp table ها زمانی بسیار مفید هستند که ما نیاز به ذخیره داده های موقت داشته باشیم. جداول موقت را نمی توان پارتیشن بندی کرد. اگر بیش از یک جدول موقت در یک sp یا batch ای ایجاد شود، باید نام های متفاوتی داشته باشند. اگر یک schema_name را هنگام ایجاد یا دسترسی به یک جدول موقت اضافه کنید، نادیده گرفته می شود (ignore میشه). تمام جداول موقت در شمای dbo ایجاد می شوند.اگر یک جدول موقت محلی در یک sp یا برنامه ای ایجاد شود که می تواند به طور همزمان توسط چندین session اجرا شود، موتور پایگاه داده باید بتواند جداول ایجاد شده توسط session های مختلف را تشخیص دهد. موتور پایگاه داده این کار را با اضافه کردن داخلی یک پسوند عددی به اسم هر جدول موقت محلی انجام می دهد. اسم کامل یک جدول موقت که در جدول sys.sysobjects در tempdb ذخیره شده است از اسم جدول مشخص شده در عبارت CREATE TABLE و پسوند عددی تولید شده توسط سیستم تشکیل شده است.برای اجازه دادن به پسوند، table_name مشخص شده برای اسم یک جدول موقت محلی نمی تواند از 116 کاراکتر تجاوز کند. در نگاه اول، ممکن است این یک View به نظر برسد، اما view ها و temp table ها تا حدودی متفاوت هستند: ▪ یک view فقط برای یک Query وجود دارد. هر بار که از اسم یک View استفاده می کنید، جدول آن از داده های موجود دوباره ایجاد (recreate) می شود. اما یک temp table برای کل session پایگاه داده ای که در آن ایجاد شده است وجود دارد.یک View به طور خودکار با داده های بازیابی شده (retrieve شده) توسط کوئری که آن را تعریف می کند، پر می شود. اما باید داده ها را با دستورات SQL INSERT به یک جدول موقت اضافه کنید.فقط view هایی که معیارهای به روز رسانی view را دارند می توانند برای تغییرات داده (data modification) استفاده شوند. اما از آنجایی که جداول موقت جداول پایه (base table) هستند، همه آنها را می توان update کرد. (آنها را می توان update کرد، اما به خاطر داشته باشید که تغییراتی که انجام می دهید در پایگاه داده حفظ نمی شوند.)از آنجایی که هر بار که از اسم view استفاده می شود، محتوای یک view تولید می شود، داده های یک view همیشه جاری (current) هستند. داده های موجود در یک جدول موقت، وضعیت پایگاه داده را در زمانی که جدول با داده لود می شود،  برمی گرداند. اگر داده‌هایی که جدول موقت از آنها لود شده است، پس از دریافت داده‌های جدول موقت تغییر کند(modify شود)، ممکن است محتویات جدول موقت با سایر بخش‌های پایگاه داده هماهنگ نباشد.اگر با تغییر داده های منبع، محتویات یک جدول موقت قدیمی می شود، اصلاً چرا از یک جدول موقت استفاده کنیم؟ آیا بهتر نیست به سادگی از view ای استفاده کنیم که محتوای آن به طور مدام بازسازی (regenerate) می شود؟جواب در performance نهفته است. زمان پردازش برای ایجاد جدول view طول می کشد. اگر قرار است در طول یک session پایگاه داده فقط یک بار از داده ها استفاده کنید، در واقع یک View بهتر از یک جدول موقت عمل می کند زیرا نیازی به ایجاد ساختار برای آن ندارید. اما، اگر قرار است از داده ها به طور مکرر در طول یک session استفاده کنید، یک جدول موقت عملکرد (performance) بهتری را ارائه می دهد زیرا فقط یک بار باید ایجاد شود.در نتیجه:استفاده مکرر از یک view زمان بیشتری می برد، اما داده ها را به طور مداوم به روز می کند. استفاده مکرر از جدول موقت باعث صرفه جویی در زمان می شود، اما شما این خطر را دارید که محتوای جدول قدیمی باشد.چگونه یک temp table در کوئری SQL ایجاد کنیم؟ا syntax  ایجاد یک temp table به شرح زیر است:برای ایجاد temp table : CREATE TABLE #EmpDetails (id INT, name VARCHAR(25))برای وارد کردن (insert کردن) مقادیر در temp table: INSERT INTO #EmpDetails VALUES (01, &#039;Lalit&#039;), (02, &#039;Atharva&#039;)برای select کردن مقادیر از temp table:SELECT * FROM #EmpDetailsدو نوع temp table وجود داره:1-  جدول موقت محلی - local temp tableیک temp table محلی فقط برای session ای که آن را ایجاد کرده است در دسترس است. هنگامی که connection ای که آن را ایجاد کرده است بسته شود، به طور خودکار حذف می شود. برای ایجاد جدول موقت محلی (local)، تنها  یک &quot;#&quot; به عنوان پیشوند نام جدول استفاده می شود. همچنین کاربر می تواند با استفاده از کوئری “DROP TABLE #EmpDetails” این جدول موقت را حذف کند. اعداد رندوم به اسم جدول اضافه می شوند. اگر جدول موقت در داخل sp ایجاد شود، پس از اتمام اجرای sp ، به طور خودکار حذف می شود.مثالCREATE PROCEDURE ProcTemp 
AS
BEGIN
CREATE TABLE #EmpDetails
INSERT INTO #EmpDetails VALUES ( 01, &#039;Lalit&#039;), ( 02, &#039;Atharva&#039;)
SELECT * FROM #EmpDetails
END
EXECUTE ProcTemp2- جدول موقت سراسری - global temporary tableبرای ایجاد یک جدول موقت سراسری، نماد &quot;##&quot; را قبل از نام جدول اضافه کنید.مثالCREATE TABLE ##EmpDetails (id INT, name VARCHAR(25))جداول موقت سراسری ( global temporary table ) برای همه کانکشن ها قابل مشاهده است و با بسته شدن آخرین کانکشنی که به جدول ر فرنس می دهد، حذف (drop) می شوند. در tempdb ذخیره می شوند و در بین تمام session های کاربران در کلِ اینستنسِ SQL Server به اشتراک گذاشته می شوند.  user session از پایگاه های داده دیگر نمی توانند به temp table های سراسری دسترسی پیدا کنند. اسم جدول سراسری باید یک اسم جدول منحصر به فرد داشته باشد. هیچ عدد تصادفی پسوندی در انتهای اسم جدول وجود نخواهد داشت.جداول موقت زمانی که از محدوده خارج می شوند به طور خودکار حذف می شوند، مگر اینکه به صراحت با استفاده از DROP TABLE حذف شوند:یک جدول موقت محلی ایجاد شده در یک sp به طور خودکار پس از اتمام  sp حذف می شود. جدول را می توان با هر  sp  تو در تو که توسط  sp ای که جدول را ایجاد کرده است، رفرنس داد. جدول نمی تواند با sp ای که sp ای که جدول را ایجاد کرده را فراخوانی کرده است، ارجاع داده شود.تمام جداول موقت محلی دیگر به طور خودکار در پایان session جاری drop می شوند. جداول موقت سراسری به طور خودکار حذف می شوند وقتی session ای که جدول را ایجاد کرده است به پایان می رسد و همه task های دیگر رفرنس دادن به آنها را متوقف می کنند.ارتباط بین یک task و یک جدول فقط برای  life time ِ  یک دستور Transact-SQL حفظ می شود. ( a single Transact-SQL statement). این بدان معناست که یک جدول موقت سراسری پس از تکمیل آخرین دستور Transact-SQL که به طور فعال به جدول هنگامِ پایانِ session ایجاد رفرنس داده میشد، حذف می شود.یک جدول موقت محلی ایجاد شده در یک SP یا trigger   می تواند نام یک جدول موقتی را داشته باشد که قبل از فراخوانی SP یا trigger  ایجاد شده است. با این حال، اگر یک query به یک جدول موقت اشاره کند و دو جدول موقت با همان نام در آن زمان وجود داشته باشد، مشخص نیست که کوئری با کدام جدول حل شده است.ا SP های تودرتو همچنین می توانند جداول موقتی با همان نام جدول موقت ایجاد کنند که توسط  SP ای که آن را فراخوانی می کند ایجاد شده است. با این حال، برای رفع تغییرات در جدولی که در SP  تودرتو ایجاد شده است، جدول باید همان ساختار، با همان نام ستون‌ها، مانند جدول ایجاد شده در SP فراخوانی کننده باشد.این در مثال زیر نشان داده شده است.این مجموعه ی نتایج است:هنگامی که جداول موقت محلی یا سراسری ایجاد می کنید، دستور CREATE TABLE از  constraint definition ها به جز constraint های FOREIGN KEY  پشتیبانی می کند. اگر یک محدودیت FOREIGN KEY در یک جدول موقت مشخص شده باشد، این statement یک پیام هشدار برمی‌گرداند که بیان می‌کند محدودیت نادیده گرفته شده است (constraint was skipped)جدول همچنان بدون محدودیت های FOREIGN KEY ایجاد می شود. جداول های موقت  نمی توانند به محدودیت های FOREIGN KEY ارجاع بدهند. اگر یک جدول موقت با یک محدودیت با نام ایجاد شود و جدول موقت در محدوده یک transaction تعریف شده توسط کاربر (user-defined) ایجاد شود، تنها یک کاربر در هر زمان می تواند statement ای را که temp tableرا ایجاد می کند، execute کند. به عنوان مثال، اگر یک SP یک جدول موقت با یک Constraint کلید اولیه (primary key) ایجاد کند، SP نمی تواند به طور همزمان توسط چندین کاربر اجرا شود.اPermission هاهر user میتواند object های موقت سراسری ایجاد کند. user ها فقط می توانند به object های خود دسترسی داشته باشند مگر اینکه permission های اضافی دریافت کنند.</description>
                <category>Girl</category>
                <author>Girl</author>
                <pubDate>Mon, 20 Jun 2022 23:12:12 +0430</pubDate>
            </item>
                    <item>
                <title>یک دیتابیس واحد (single database) در Azure SQL Database  چیست؟</title>
                <link>https://virgool.io/@A_girl/%DB%8C%DA%A9-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D9%88%D8%A7%D8%AD%D8%AF-single-database-%D8%AF%D8%B1-azure-sql-database-%DA%86%DB%8C%D8%B3%D8%AA-cpfh5ivog69v</link>
                <description>ا resource type ِیک دیتابیس واحد (single database)، یک دیتابیس در Azure SQL Database با مجموعه ای از ریسورس ها (منابع) خود ایجاد می کند و از طریق یک server مدیریت  می شود. با یک دیتابیس واحد ( دیتابیس واحد همان single database است) هر دیتابیس با استفاده از موتور (engine) دیتابیس اختصاصی ایزوله می شود. هر کدام دارای سطح خدمات خود در DTU-based purchasing model یا vCore-based purchasing model و یک اندازه محاسبه شده (compute size) است که منابع (resource) های تخصیص یافته به engine ِ پایگاه داده را تعریف می کند.ا single database یک مدل استقرار برای پایگاه داده Azure SQL است. مدل دیگر elastic pools است.مقیاس پذیری پویا (dynamic scalability)می توانید اولین برنامه خود را بر روی یک single database کوچک و با هزینه کم در سطح محاسبات بدون سرور یا یک اندازه محاسباتی کوچک در سطح محاسباتیِ ارائه شده بسازید. شما در هر زمان که بخواهید به صورت دستی (manual) یا از طریق برنامه نویسی سطح محاسبات یا سرویس (compute or service tier) را تغییر می دهید تا نیازهای solution خود را برآورده کنید. میتوانید عملکرد (performance) را بدون توقف برنامه یا مشتریان خود تنظیم (adjust) کنید. داینامیک اسکیلبیلیتی، دیتابیسِ شما را قادر میسازد تا به صورت شفاف به نیازهای ریسورس های در حال تغییر به سرعت پاسخ دهد و به شما این امکان را می دهد که فقط در صورت نیاز برای ریسورس هایی که نیاز دارید هزینه کنید.ا Single database ها و elastic pool هایک single database را می توان برای اشتراک منابع (resource sharing) به داخل یا خارج از یک elastic pool  (استخر الستیک) منتقل کرد. برای بسیاری از business ها و application ها، توانایی ایجاد single database ها و شاخص performance بالا یا پایین در صورت نیاز؛ کافی است، به خصوص اگر الگوهای استفاده نسبتا قابل پیش بینی باشند. اما اگر الگوهای استفاده (usage pattern های) غیرقابل پیش‌بینی دارید، مدیریت هزینه‌ها (cost) و business model را سخت می‌کند. elastic pool ها برای حل این مشکل طراحی شده اند. مفهوم ساده است. شما منابع عملکرد (performance resource ها) را به جای یک پایگاه داده فردی (individual database) به یک استخر (pool) اختصاص می دهید و به جای عملکرد یک پایگاه داده، برای مجموعه ای از ریسورس های مشترک (collective performance resource ها) هزینه می پردازید.ا Monitoring and alerting (نظارت و هشدار)شما از نظارت بر عملکرد (performance monitoring) و ابزارهای هشدار داخلیِ( alerting tools ) built-in، همراه با رتبه بندی عملکرد (performance rating) استفاده می کنید. با استفاده از این ابزارها، می توانید به سرعت، تأثیر افزایش یا کاهش مقیاس (scaling) را بر اساس نیازهای فعلی یا عملکرد پروژه خود ارزیابی کنید. علاوه بر این، SQL database می تواند لاگ های metrics (معیارها) و  منابع (resource ها) را برای نظارت آسان تر منتشر کند.ا Availability capabilities (قابلیت های در دسترس بودن)ا single database ها و elastic pool ها بسیاری از ویژگی های در دسترس بودن را فراهم می کنند . برای اطلاعات، Availability characteristics را ببینید.تفاوت های Transact-SQLاکثر ویژگی‌های Transact-SQL که برنامه‌ها از آن‌ها استفاده می‌کنند، هم در Microsoft SQL Server و هم در پایگاه داده Azure SQL به طور کامل پشتیبانی می‌شوند. به عنوان مثال، اجزای اصلی SQL مانند انواع داده (data type ها)، عملگرها (operators)، رشته (string)، حساب (arithmetic)، منطقی (logical) و توابع مکان نما (cursor function ها)، در SQL Server و SQL Database یکسان کار می کنند. با این حال، چند تفاوت T-SQL در عناصر DDL (زبان تعریف داده - data-definition language) و DML (زبان دستکاری داده ها - data manipulation language) وجود دارد که منجر به عبارات و کوئری های T-SQL می شود که فقط تا حدی پشتیبانی می شوند (که در ادامه این مقاله به آن خواهیم پرداخت).علاوه بر این، برخی از ویژگی ها (feature ها) و syntaxها وجود دارند که پشتیبانی(support) نمی شوند زیرا پایگاه داده Azure SQL برای جداسازی ویژگی ها از وابستگی (isolate features from dependencies) به پایگاه داده اصلی (master database) و سیستم عامل طراحی شده است.به این ترتیب، بیشتر فعالیت های سطح سرور (server-level activities) برای پایگاه داده SQL نامناسب هستند. دستورات و گزینه های T-SQL در صورت پیکربندی (config) گزینه های سطح سرور (server-level options)، پیکربندی اجزای سیستم عامل (config ِ کامپوننت های سیستم عامل)یا مشخص کردن پیکربندی سیستم فایل (file system configuration) در دسترس نیستند. هنگامی که چنین قابلیت هایی مورد نیاز است، یک جایگزین مناسب اغلب به روشی دیگر از پایگاه داده SQL یا از یکی دیگر از ویژگی ها یا سرویس های Azure در دسترس است.برای اطلاعات بیشتر، به حل تفاوت های Transact-SQL در هنگام migration به پایگاه داده SQL مراجعه کنید.Resolving Transact-SQL differences during migration to SQL Database.ا Security (امنیت)پایگاه داده SQL طیف وسیعی از ویژگی‌های امنیتی داخلی (built-in) و انطباق را برای کمک به برنامه شما در برآوردن الزامات مختلف امنیتی و انطباق ارائه می‌کند.مهمپایگاه داده Azure SQL در برابر تعدادی از استانداردهای انطباق تأیید شده است. برای اطلاعات بیشتر، Microsoft Azure Trust Center مراجعه کنید، جایی که می‌توانید جدیدترین لیست گواهینامه های انطباق با پایگاه داده SQL را پیدا کنید.مراحل بعدیبرای شروع سریع با یک single database، با Single database quickstart guide شروع کنید.برای آشنایی با انتقال(migrating) یک پایگاه داده SQL Server به Azure، به Migrate to Azure SQL Database مراجعه کنید.برای اطلاعات در مورد featureهای پشتیبانی شده، به Features مراجعه کنید.</description>
                <category>Girl</category>
                <author>Girl</author>
                <pubDate>Fri, 17 Jun 2022 19:19:12 +0430</pubDate>
            </item>
                    <item>
                <title>مبانی ASP.Net Core (دات نت 5)</title>
                <link>https://virgool.io/@A_girl/%D9%85%D8%A8%D8%A7%D9%86%DB%8C-aspnet-core-%D8%AF%D8%A7%D8%AA-%D9%86%D8%AA-5-gnuebyeonixn</link>
                <description>در این مقاله موضوعات کلیدی برای درک نحوه توسعه برنامه‌های ASP.NET Core را مرور می کنیم.The Startup classکلاس Startup جایی است که:سرویس های مورد نیاز برنامه configure (پیکربندی) شده است.همچنین  app&#x27;s request handling pipeline (پایپ لاینِ هندل کردن request ِ برنامه) به صورت مجموعه ای ازmiddleware component ها define (تعریف) می شود. اینجا یک نمونه از کلاس Startup آورده شده است:برای اطلاعات بیشتر، App startup in ASP.NET Core را ببینید.Dependency injection (services)در واقع ASP.NET Core شامل یک فریم ورک built-in (داخلیِ) تزریق وابستگی ( DI - Dependency injection) است که سرویس های Configure شده را در سراسر یک برنامه در دسترس قرار می دهد (available می کند). به عنوان مثال، یک logging component (کامپوننت ورود به سیستم) یک سرویس است .کدی برای configure (یا ثبت نام (register)) سرویس ها به متد Startup.ConfigureServices اضافه می شود. مثلا:سرویس ها معمولاً از DI با استفاده از constructor injection (تزریق سازنده) حل می شوند. با constructor injection، یک کلاس یک پارامتر constructor از typeِ مورد نیاز یا یک interface را declare می کند. DI framework نمونه (instance) ای از این سرویس را در زمان اجرا (runtime) ارائه می دهد.مثال زیر از constructor injection برای حل یک RazorPagesMovieContext از DI استفاده می کند:اگر کانتینر Inversion of control (IoC) همه نیازهای یک برنامه را برآورده نکند، می توان به جای آن از یک third-party IoC container استفاده کرد.برای اطلاعات بیشتر، به تزریق وابستگی در ASP.NET Core مراجعه کنید : Dependency injection in ASP.NET CoreMiddlewareدر واقع request handling pipeline از یک سری ازmiddleware component ها تشکیل شده است. هر component (جزء) عملیاتی را بر روی یک HttpContext انجام می دهد و middleware بعدی را در pipeline فراخوانی می کند یا request (درخواست) را خاتمه می دهد (terminate می کند).طبق قرارداد، یک middleware component با فراخوانی (invoke کردن) اکستنشن متدِ Use... در متد Startup.Configure به  pipeline اضافه می‌شود. به عنوان مثال، برای فعال کردن رندر فایل‌های استاتیک، UseStaticFiles را فراخوانی (invoke) کنید.مثال زیر یک request handling pipeline را configure می کند:همچنین ASP.NET Core شامل مجموعه ای غنی از مmiddleware های built-in است. می توانید middleware های custom نیز بنویسید.برای اطلاعات بیشتر، ASP.NET Core Middleware را ببینید:ASP.NET Core MiddlewareHostدر هنگام راه اندازی (startup)، یک برنامه ASP.NET Core یک host می سازد. هاست تمام ریسورس های برنامه را encapsulate می کند، مانند:ا اجرای سرورِ HTTP (همون An HTTP server implementation) اا Middleware components اا Logging ااDependency injection (DI) servicesااConfigurationادو هاست مختلف وجود دارد:.NET Generic HostASP.NET Core Web Hostمعمولا میزبان هاستِ جنریکِ دات نت (.NET Generic Host) توصیه می شود. ASP.NET Core Web Host فقط برای سازگاری با backwards در دسترس (available) است.مثال زیر یک هاست جنریک دات نت ایجاد می کند:متدهای CreateDefaultBuilder و ConfigureWebHostDefaults یک هاست را با مجموعه ای از option های پیش فرض configure می کنند، مانند:استفاده از Kestrel به عنوان وب سرور و  فعال کردن IIS integration .لود کردن configuration از  appsettings.json, appsettings.{Environment Name}.json, environment variables, command line arguments, و سورس های دیگر.ارسال logging output  به کنسول و debug provider ها.برای اطلاعات بیشتر، به .NET Generic Host در ASP.NET Core مراجعه کنید..NET Generic Host in ASP.NET CoreNon-web scenariosگفته شده Generic Host (هاستِ عمومی) به انواع دیگر برنامه ها اجازه می دهد تا از اکستنشن های فریم ورکِ cross-cutting استفاده کنند. مانند logging, dependency injection (DI), configuration, and app lifetime management. برای اطلاعات بیشتر، به .NET Generic Host in ASP.NET Cor و Background tasks with hosted services in ASP.NET Cor مراجعه کنید.Serversیک برنامه ASP.NET Core از implementation ِ  HTTP server برای گوش دادن به request های HTTP استفاده می کند. سرور request ها را به‌عنوان مجموعه‌ای از فیچرهای درخواستی که در یک HttpContext تشکیل شده‌اند، به برنامه ارائه می‌کند.ا ASP.NET Core در واقع server implementation های زیر را ارائه می دهد:ویندوز:ا Kestrel یک وب سرور کراس پلتفرم است. Kestrel اغلب در یک configuration پروکسی معکوس با استفاده از IIS اجرا می شود. در ASP.NET Core 2.0 یا جدیدتر، Kestrel می تواند به عنوان یک سرور   عمومی  (public-facing edge) که مستقیماً در معرض اینترنت قرار دارد اجرا شود.و IIS HTTP Server سروری برای ویندوز است که از IIS استفاده می کند.و HTTP.sys سروری برای ویندوز است که با IIS استفاده نمی شود.مک و لینوکس:ا ASP.NET Core پیاده سازی سرور کراس پلتفرم Kestrel را ارائه می دهد. در ASP.NET Core 2.0 یا جدیدتر، Kestrel می تواند به عنوان یک سرور لبه عمومی (public-facing edge) که مستقیماً در معرض اینترنت قرار دارد اجرا شود. Kestrel اغلب در یک configuration پروکسی معکوس با Nginx یا Apache اجرا می شود.برای اطلاعات بیشتر، به پیاده سازی وب سرور در ASP.NET Core مراجعه کنید:Web server implementations in ASP.NET CoreConfiguration ا ASP.NET Core یک فریم ورک  configuration ارائه می دهد که تنظیمات را به عنوان زوج نام-مقدار (name-value pairs) از مجموعه ی مرتب شده ای از ارائه دهندگان configuration دریافت می کند.ا  Built-in configuration provider ها برای سورس های مختلفی مانند فایل‌های json.، فایل‌های xml.، متغیرهای محیطی و آرگومان‌های خط فرمان (کامند لاین) در دسترس هستند. برای ساپورت کردن (پشتیبانی کردن از) سورس های دیگر configuration provider های custom را بنویسید. به طور پیش‌فرض، برنامه‌های ASP.NET Core برای خواندن از appsettings.json، متغیرهای محیطی (environment variables)، command line و موارد دیگر configure شده‌اند. هنگامی که configuration برنامه لود می شود، مقادیر متغیرهای محیطی مقادیر appsettings.json را اورراید می کنند. روش ترجیحی برای خواندن ولیوهای configuration مرتبط، استفاده ازoptions pattern است. برای اطلاعات بیشتر، بایند کردنِ داده‌های configuration سلسله مراتبی را با استفاده از options pattern ببینید.Bind hierarchical configuration data using the options pattern.برای مدیریت داده های configurationِ محرمانه مانند  پسورد ها، NET Core، Secret Manager را ارائه می دهد. برای محصولات سکرت، Azure Key Vault را پیشنهاد می کنیم.برای اطلاعات بیشتر به configuration در ASP.NET Core مراجعه کنید.Configuration in ASP.NET CoreEnvironmentsمحیط های اجرایی (Execution environments) مانند Staging ،Development و Production مفاهیم  اولیه در  ASP.NET Core هستند. با set کردن environment variable  (متغیر محیطیِ (محلی)) ASPNETCORE_ENVIRONMENT، محیطی را که یک برنامه در آن اجرا می شود، مشخص می کنید. ASP.NET Core آن متغیر محیطی را هنگام راه اندازی برنامه (app startup) می خواند و مقدار (value) را در پیاده سازی IWebHostEnvironment ذخیره می کند. این پیاده سازی در هر نقطه از برنامه از طریق تزریق وابستگی (DI) available است.مثال زیر برنامه را طوری configure می‌کند که جزئیات اطلاعات error  را هنگام اجرا در محیط Development ارائه کند:برای اطلاعات بیشتر، استفاده از چندین enviroment در ASP.NET Core را ببینید.Loggingا ASP.NET Core از یک API ورود به سیستم پشتیبانی می کند که با انواع provider های built-in و  third-party کار می کند.  provider های موجود عبارتند از:ConsoleDebugEvent Tracing on WindowsWindows Event LogTraceourceAzure App ServiceTrace Sourcecation Insights برای ایجاد log ها، یک سرویس &lt;#&gt;ILogger (به جای # ،  TCategoryName در نظر بگیر)را از تزریق وابستگی (DI) و فراخوانی متدهای logging مانند LogInformation قرار بدهید. مثلا:متدهای logging مانند LogInformation از هر تعداد فیلد پشتیبانی می‌کنند. این فیلدها معمولاً برای ساخت یک  پیام string استفاده می‌شوند، اما برخی از  logging provider ها آن‌ها را به عنوان فیلدهای جداگانه به یک data store ارسال می‌کنند. این feature این امکان را به logging provider  می دهد تا semantic logging را پیاده سازی کنند که به عنوان structured logging نیز شناخته می شود.برای اطلاعات بیشتر، به Logging در .NET Core و ASP.NET Core مراجعه کنید.Logging in .NET Core and ASP.NET Core.Routingیک route یک پترنِ URL است که به یک   handler, درواقع map می شود. handler عموما Razor page، یک متد action در کنترلر MVC یا یک middleware است. و  ASP.NET Core routing به شما امکان کنترل URL های مورد استفاده توسط برنامه را می دهد.برای اطلاعات بیشتر، routing در ASP.NET Core را ببینید:Routing in ASP.NET Core.Error handlingا ASP.NET Core دارای فیچر های bult-in برای handle کردن خطاها است، مانند:A developer exception pageCustom error pagesStatic status code pagesStartup exception handlingبرای اطلاعات بیشتر، به Handle errors در ASP.NET Core مراجعه کنید:Handle errors in ASP.NET Core.Make HTTP requestsپیاده سازی IHttpClientFactory برای ایجاد instance های HttpClient در دسترس است. این factory:یک location ِ مرکزی برای نامگذاری و instance ِ configuring های HttpClient منطقی فراهم می کند. به عنوان مثال، یک کلاینت github را برای دسترسی به GitHub ثبت و configure می کند. یک کلاینت پیش فرض را برای مقاصد دیگر ثبت و configure می کند.پشتیبانی از ثبت و زنجیره ای از چندین delegating handler برای ایجاد request middleware pipeline خروجی. این pattern مکانیزمی را برای مدیریت concern های مقطعی (cross-cutting)برای درخواست های HTTP، از جمله caching،  error handling،  serialization و logging فراهم می کند.با Polly، یک کتابخانه third-party محبوب برای هندل کردن  خطاهای transient (گذرا) می شود.برای جلوگیری از مشکلات رایج DNS که هنگام مدیریت lifetimeهای HttpClient به صورت دستی رخ می دهد، lifetime و  pooling نمونه (instance) های اصلی HttpClientHandler را مدیریت می کند.یک تجربه configurable logging (ورود به سیستم قابل تنظیم) را از طریق ILogger برای تمام درخواست‌های ارسال شده از طریق کلاینت‌های ایجاد شده توسط factory اضافه می‌کند.برای اطلاعات بیشتر، به ایجاد درخواست های HTTP با استفاده از IHttpClientFactory در  ASP.NET Core مراجعه کنید:Make HTTP requests using IHttpClientFactory in ASP.NET CoreContent rootا  content root مسیر اصلی برای:The executable hosting the app (.exe)  (هاستینگ قابل اجرای برنامه)Compiled assemblies that make up the app (.dll) (اسمبلی های کامپایل شده که برنامه را تشکیل می دهد)Content files used by the app, such as:          -  Razor files (.cshtml, .razor)          - Configuration files (.json, .xml)           - Data files (.db)فایل های محتوا که توسط برنامه استفاده می شوند مانند:-- - فایل های Razor-- - فایل های configuration-- - فایل های دیتا The Web root, typically the wwwroot folderروتِ وب، معمولا فولدر wwwrootدر طول توسعه (development)، content root به طور پیش فرض به دایرکتوری root پروژه می رسد. این دایرکتوری همچنین مسیر اصلی فایل های محتوای برنامه و Web root است. با تنظیم مسیر (path) آن هنگام ساخت هاست (building the host)، content root متفاوتی را مشخص کنید.برای اطلاعات بیشتر، Content root را ببینید: Content rootWeb rootا web root مسیر پایه برای ریسورس فایل های  public و static است، مانند:Stylesheets (.css)JavaScript (.js)Images (.png, .jpg)به‌طور پیش‌فرض، فایل‌های استاتیک فقط از web root و زیرشاخه‌های (sub-directory) های آن ارائه می‌شوند. مسیر web root به صورت پیش فرض {content root}/wwwroot است. یک web root متفاوت را با تنظیم مسیر آن هنگام ساخت هاست مشخص کنیدبرای اطلاعات بیشتر، Content root را ببینید: Web rootجلوگیری از انتشار فایل ها در wwwroot با ایتم پروژه &lt;Content&gt; در فایل پروژه. مثال زیر از انتشار content در wwwroot/local و زیرمجموعه‌های آن جلوگیری می‌کند:در فایل‌های Razor .cshtml علامت tilde-slash (/~) به روت وب اشاره می‌کند. مسیری که با /~ شروع می شود به عنوان virtual path نامیده می شود.</description>
                <category>Girl</category>
                <author>Girl</author>
                <pubDate>Tue, 01 Feb 2022 01:30:29 +0330</pubDate>
            </item>
                    <item>
                <title>3 نکته برای بهره وری بهتر در درس خواندن</title>
                <link>https://virgool.io/@A_girl/3-%D9%86%DA%A9%D8%AA%D9%87-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A8%D9%87%D8%B1%D9%87-%D9%88%D8%B1%DB%8C-%D8%A8%D9%87%D8%AA%D8%B1-%D8%AF%D8%B1-%D8%AF%D8%B1%D8%B3-%D8%AE%D9%88%D8%A7%D9%86%D8%AF%D9%86-p3mclmiyibkm</link>
                <description>یک هفته مونده بود به امتحان سرنوشت سازی که داشتم. یه مقاله ای خوندم که روش هایی برای افزایش بازدهی رو معرفی کرده بود با توجه به این که انگلیسی بود تصمیم گرفتم ترجمه کنم و با شما هم به اشتراک بذارم.1# در طول روز چندین وعده غذایی سبک بخورمطالعه با معده نیمه خالی میتونه بهت کمک کنه اطلاعات را سریع تر یاد بگیری و همچنین بهتر تو ذهنت بمونه. گرسنگی شما را باهوش تر می کنه :))اگه تو کافه مشغول مطالعه هستی به جای ساندویچ یک سالاد سفارش بده. ( کافیه گرسنه نباشی اما انقدر هم نخور که سیر بشی). غذا میتونه نقش مهمی در موفقیت شما به عنوان یک دانش آموز داشته باشه ، چون غذا به بدن و ذهن ما سوخت میده.چای سبز، سبزیجات، ماهی و شکلات تلخ از جمله غذاهایی هستند که به افزایش تمرکز کمک می کنند. پیتزا رو بیخیال شو یه مدت :) آجیل ( سرشار از امگاه 3 غنی کننده مغز) را به عنوان یک میان وعده در حین کار نگه دار.2# در بازه های کوتاه مطالعه کنتمام مطالب رو در زمان های طولانی و شبانه مطالعه نکن. اینطوری مطالب کمتری تو ذهنت میمونه و زمانت رو هدر دادی. در عوض در فواصل 20 دقیقه تا یک ساعت مطالعه کن، بعدش پیاده روی کن یا میان وعده بخور و باز ادامه مطالعه. حداکثر ظرفیت مغز برای کار عمیق و متمرکز حدود 4 ساعت هست. بیشتر از این مغز رو خسته می کنه و برای شما هزینه داره. هزینش هم به این صورت هست که برای یادگیری مطلبی که میتونی تو یه ساعت تمومش کنی باید دوبرابر زمان صرف کنی. برای همین زود مطالعه کردن و اغلب ( با استراحت) بهترین روش آماده شدن برای آزمون هست.تحت هیچ شرایطی نباید در زمان استراحت تلفن یا ایمیل چک کنی! مکانی آرام برای مطالعه پیدا کن که در آن مزاحمتی نباشه. اگر اتاق شما برای مطالعه بیش از حد ساکت است، گوش دادن به یک میکس مطالعه خوب یا قرار دادن صداهای کتابخانه می تواند آرامش بخش و مفید باشه.3# زود به رختخواب برو، زود بیدار شوداشتن خواب کافی خیلی مهم هست و کیفیت خواب در میزان عملکرد شما در طول روز نقش داره. حداقل یک ساعت قبل از خواب از گوشی خود دور بمون. همچنین اگه باید تا زمانی که به رختخواب میری پشت کامپیوتر باشی با خودت فکر کن: آیا ارزش خراب کردن خواب من رو داره؟ چون اگه خواب بهتری داشته باشی میتونی یک ساعت زودتر  از خواب بیدار بشی و صبح ها هرکاری رو که لازم بود انجام بدی. پیشنهاد می‌کنم یک برنامه روتین صبحگاهی تنظیم کنی که بهت  انگیزه بده.روز خود را با لیمو و آب، یا چای، و 10 دقیقه حرکات کششی یا یوگا شروع کن تا خون شما حرکت کنه و بدن سفت شما شل بشه و احساس خوبی داشته باشی. صبح رو با کار سبک شروع کن و از نوشتن مقاله یا حل مسئله های سخت خودداری کن. می خوای دوست داشته باشی از خواب بیدار شی، یادت نره. در نهایت، مهمه که بدونی آدم ها متفاوت هستند. گاهی اوقات زود بیدار شدن برای شما مناسب نیست. استرس نداشته باش! فقط مطمئن شو که خواب کافی داری. 7-8 ساعت معمول است و به هر قیمتی شده برای رسیدن به آن هدف تلاش کن، حتی اگر به معنای ترک زودهنگام مهمانی باشه. خوابیدن کمتر از 7 ساعت تأثیر چشمگیری بر عملکرد شما داره (و باعث می شود تا 25 درصد بیشتر در معرض تصادف رانندگی قرار بگیری - خوب فکر کن!)</description>
                <category>Girl</category>
                <author>Girl</author>
                <pubDate>Sun, 30 Jan 2022 13:04:12 +0330</pubDate>
            </item>
            </channel>
</rss>