Web Devs
644 subscribers
218 photos
22 videos
17 files
233 links
Articles, News, Jokes, Quotes, Back-End and UI/UX for web developers.
Github : https://github.com/fullStackDevsGroup
Advertising: @adsfullStackDevs
Download Telegram
#SQLServer
#C#
#ASP.NET
#User_Defined_Table_Types
#TVP
#Table_Valued_Parameter

فرض کنید که شما توی برنامه تون درقسمت جستجو محصولات از یک استور پروسیجر استفاده میکنید که نیاز دارین یک بازه ای از قیمت(رکورد هایی از fromPrice ,toPrice) به ورودی اش اضافه کنید که بتونید تو بدنه استور پروسیجر فیلتر بازه قیمت را اعمال کنید . حالا شما باید این بازه قیمت را بصورت دیتا تیبل به متغیر های ورودی استور پروسیجر اضافه کنید .

در نظر داشته باشید که برای اینکه دیتا بیس بفهمه چه نوع دیتا تیبلی داریم بهش پاس میدیم باید ساختارش را تعریف کنیم.به این صورت که یه new query در sql server باز میکنیم و در دیتا بیس مورد نظر این ساختار رو بصورت زیر تعریف میکنیم :
CREATE TYPE [dbo].[PriceRanges] AS TABLE(
[PriceMin] [decimal](18, 4) NULL,
[PriceMax] [decimal](18, 4) NULL
)
GO


بعد از اجرای کد بالا در مسیرprogrammability/Types/User-Defined Table Types ذخیره میشود .درواقع شما الان یک user-defined table type تعریف کردید.

حالا میتونید این نوع دیتا تیبل را به استورپروسیجر مورد نظر اضافه کرد . مثل نمونه کد زیر :
CREATE PROCEDURE [dbo].[SearchProduct]
(
@CategoryIds nvarchar(MAX) = null,
@SectionIds nvarchar(MAX) = null,
@ManufacturerId int = 0,
@PriceRangeList dbo.PriceRanges READONLY

)
AS
BEGIN

/* another code */
IF EXISTS (SELECT 1 FROM @PriceRangeList)
BEGIN
...
END
END
GO

حال فقط کافیست زمانی که تو برنامه میخوایید از این استور پروسیجر استفاده کنید بازه قیمت را بصورت دیتا تیبل با همین ساختار پاس بدهید

@ArmanAbi
#AlwaysOn
#SqlServer


درباره AlwaysOn چیست؟

در واقع Alwayson همکاری بین سرویس Windows server failover cluster- WSFC از ویندوز و Alwayson در اس کیو ال هستش. روش کار به طور خلاصه بدین صورت هست که ما چند تا سرور که اس کیو ال روی اونها نصب هستش رو به عنوان یک گروه Cluster معرفی می کنیم. به ابن منظور که اگر یکی از این سرورها Down شد یکی دیگه جایگزینش باشه.نکته ای هم که وجود داره، این سرورها با هم Sync هستند .
به طور خلاصه AlwaysOn باعث میشود تا دیتابیس شما همیشه آماده سرویس دهی باشد. حتی در مواقعی که سرور اصلی شما خاموش شود!!! یا هر نوع مشکل سخت افزاری یا نرم افزاری برای سرور دیتابیس اتفاق بیافتد یا سرور دیتابیس Crash کند.
توی برنامه هم کاربرها واسه Connection String فقط یه IP یا اسم set می کنن که در اصطلاح بهش میگیم Listener و این شنونده یا Listener با ارتباطی که با گروه Cluster داره میفهمه که در لحظه کدوم یکی از سرورها فعاله و Request رو میفرسته سراغ سرور فعال.
در Alwayson همه Instance هایی که در یک کلاستر یا گروه هستند با هم سینک هستند.البته نکته ای که وجود داره در زمان راه اندازی این امکان وجود داره که تنظیم کنیم نوع همزمان سازی به صورت Sync یا Async انجام بشه که معمولا Instnce که به صورت Async همگام میشه برای گزارشات مورد استفاده قرار میگیره.

تراکنش ها روی هر Instance که نقش Primary رو داره به طور کامل اجرا میشه و نتایج اون روی سایر Replicat ها توزیع میشه. بنابراین در زمینه کاهش ترافیک ترانزکت ها تأثیری نداره!
هدف اصلی Alwayson تأمین High Availability برای دیتابیس هست. به این معنا که همیشه دیتابیس ما در دسترس باشه و کلا Data Lost یا قطعی در سرویس دهی برنامه مون رو به دلیل قطعی ارتباط دیتابیس نداشته باشیم
به علاوه شما در Alwayson میتونین با هدایت گزارش گیری برنامه به سمت سرور دوم نوعی load balancing هم داشته باشیم.

@ArmanAbi